* 🎨 style: adjust wavy border and add layout wavy border * ♻️ refactor: change sidebar to use `nav` * ♻️ refactor: org slug dashboard layout * ♻️ refactor: create project layout and restyling it * ♻️ refactor: remove unused style * ⚡️ feat: restyling template card * ⚡️ feat: create template icon component * ⚡️ feat: use `h2` for layout title * ⚡️ feat: Add isComingSoon property to templates and handle click event in TemplateCard component * ♻️ refactor: WavyBorder component and update CreateProjectLayout * 🎨 style: update button medium size padding * 🎨 style: update layout shadow and add new shadow for the template card * ⚡️ feat: add wavy border gradient and line svg assets * refactor: update wavy border svg * 🎨 style: adjust template card name and arrow also responsive of the list of template --------- Co-authored-by: Zachery Ng <zachery.ng@gmail.com>
43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import React, { useMemo } from 'react';
|
|
import { CustomIconProps } from '../CustomIcon';
|
|
import { ReactNativeIcon } from './ReactNativeIcon';
|
|
import { cloneIcon } from 'utils/cloneIcon';
|
|
import { PWAIcon } from './PWAIcon';
|
|
import { WebAppIcon } from './WebAppIcon';
|
|
import { KotlinIcon } from './KotlinIcon';
|
|
import { SwitfIcon } from './SwiftIcon';
|
|
|
|
const TEMPLATE_ICONS = [
|
|
'react-native',
|
|
'pwa',
|
|
'web',
|
|
'kotlin',
|
|
'swift',
|
|
] as const;
|
|
export type TemplateIconType = (typeof TEMPLATE_ICONS)[number];
|
|
|
|
export interface TemplateIconProps extends CustomIconProps {
|
|
type: TemplateIconType;
|
|
}
|
|
|
|
export const TemplateIcon = ({ type, ...props }: TemplateIconProps) => {
|
|
const renderIcon = useMemo(() => {
|
|
switch (type) {
|
|
case 'react-native':
|
|
return <ReactNativeIcon />;
|
|
case 'pwa':
|
|
return <PWAIcon />;
|
|
case 'web':
|
|
return <WebAppIcon />;
|
|
case 'kotlin':
|
|
return <KotlinIcon />;
|
|
case 'swift':
|
|
return <SwitfIcon />;
|
|
default:
|
|
throw new Error(`Invalid template icon type: ${type}`);
|
|
}
|
|
}, [type]);
|
|
|
|
return cloneIcon(renderIcon, props) as JSX.Element;
|
|
};
|