diff --git a/front/src/AppNavbar.tsx b/front/src/AppNavbar.tsx index 976d689e5..34436bc2f 100644 --- a/front/src/AppNavbar.tsx +++ b/front/src/AppNavbar.tsx @@ -57,7 +57,6 @@ export function AppNavbar() { active={currentPath === '/tasks'} icon={} /> - ; + if (!favorites || favorites.length === 0) return <>; return ( - - {favorites && - favorites.map( - ({ id, person, company }) => - (person && ( - - } - to={`/person/${person.id}`} - /> - )) || - (company && ( - - } - to={`/companies/${company.id}`} - /> - )), - )} - + + + {favorites.map( + ({ id, person, company }) => + (person && ( + + } + to={`/person/${person.id}`} + /> + )) || + (company && ( + + } + to={`/companies/${company.id}`} + /> + )), + )} + ); } diff --git a/front/src/modules/ui/button/components/IconButton.tsx b/front/src/modules/ui/button/components/IconButton.tsx index c09971589..c5a02d6f1 100644 --- a/front/src/modules/ui/button/components/IconButton.tsx +++ b/front/src/modules/ui/button/components/IconButton.tsx @@ -5,20 +5,21 @@ export type IconButtonVariant = 'transparent' | 'border' | 'shadow' | 'white'; export type IconButtonSize = 'large' | 'medium' | 'small'; -export type IconButtonFontColor = 'primary' | 'secondary' | 'tertiary'; - -export type IconButtonAccent = 'regular' | 'red'; +export type IconButtonFontColor = + | 'primary' + | 'secondary' + | 'tertiary' + | 'danger'; export type ButtonProps = { icon?: React.ReactNode; variant?: IconButtonVariant; size?: IconButtonSize; textColor?: IconButtonFontColor; - accent?: IconButtonAccent; } & React.ComponentProps<'button'>; const StyledIconButton = styled.button< - Pick + Pick >` align-items: center; background: ${({ theme, variant }) => { @@ -69,13 +70,13 @@ const StyledIconButton = styled.button< return 'none'; } }}; - color: ${({ theme, disabled, textColor, accent }) => { + color: ${({ theme, disabled, textColor }) => { if (disabled) { return theme.font.color.extraLight; } - return accent - ? theme.color[accent] + return textColor === 'danger' + ? theme.color.red : theme.font.color[textColor ?? 'secondary']; }}; cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')}; @@ -126,7 +127,6 @@ export function IconButton({ size = 'medium', textColor = 'tertiary', disabled = false, - accent = 'regular', ...props }: ButtonProps) { return ( @@ -135,7 +135,6 @@ export function IconButton({ size={size} disabled={disabled} textColor={textColor} - accent={accent} {...props} > {icon} diff --git a/front/src/modules/ui/layout/components/WithTopBarContainer.tsx b/front/src/modules/ui/layout/components/WithTopBarContainer.tsx index df01c384a..52f6d526d 100644 --- a/front/src/modules/ui/layout/components/WithTopBarContainer.tsx +++ b/front/src/modules/ui/layout/components/WithTopBarContainer.tsx @@ -13,7 +13,7 @@ type OwnProps = { isFavorite?: boolean; icon: ReactNode; onAddButtonClick?: () => void; - onFavouriteButtonClick?: () => void; + onFavoriteButtonClick?: () => void; }; const StyledContainer = styled.div` @@ -29,7 +29,7 @@ export function WithTopBarContainer({ isFavorite, icon, onAddButtonClick, - onFavouriteButtonClick, + onFavoriteButtonClick, }: OwnProps) { return ( @@ -40,7 +40,7 @@ export function WithTopBarContainer({ isFavorite={isFavorite} icon={icon} onAddButtonClick={onAddButtonClick} - onFavouriteButtonClick={onFavouriteButtonClick} + onFavoriteButtonClick={onFavoriteButtonClick} /> {children} diff --git a/front/src/modules/ui/layout/page-bar/components/PageBar.tsx b/front/src/modules/ui/layout/page-bar/components/PageBar.tsx index 774d3514a..8048ba1e0 100644 --- a/front/src/modules/ui/layout/page-bar/components/PageBar.tsx +++ b/front/src/modules/ui/layout/page-bar/components/PageBar.tsx @@ -69,7 +69,7 @@ type OwnProps = { isFavorite?: boolean; icon: ReactNode; onAddButtonClick?: () => void; - onFavouriteButtonClick?: () => void; + onFavoriteButtonClick?: () => void; }; export function PageBar({ @@ -78,7 +78,7 @@ export function PageBar({ isFavorite, icon, onAddButtonClick, - onFavouriteButtonClick, + onFavoriteButtonClick, }: OwnProps) { const navigate = useNavigate(); const navigateBack = useCallback(() => navigate(-1), [navigate]); @@ -114,13 +114,13 @@ export function PageBar({ - {onFavouriteButtonClick && ( + {onFavoriteButtonClick && ( } size="large" data-testid="add-button" - accent={isFavorite ? 'red' : 'regular'} - onClick={onFavouriteButtonClick} + textColor={isFavorite ? 'danger' : 'secondary'} + onClick={onFavoriteButtonClick} variant="border" /> )} diff --git a/front/src/pages/companies/CompanyShow.tsx b/front/src/pages/companies/CompanyShow.tsx index e11a5d0bf..f3396118a 100644 --- a/front/src/pages/companies/CompanyShow.tsx +++ b/front/src/pages/companies/CompanyShow.tsx @@ -45,7 +45,7 @@ export function CompanyShow() { hasBackButton isFavorite={isFavorite} icon={} - onFavouriteButtonClick={handleFavoriteButtonClick} + onFavoriteButtonClick={handleFavoriteButtonClick} > diff --git a/front/src/pages/people/PersonShow.tsx b/front/src/pages/people/PersonShow.tsx index 3dc1a1aef..710a70c9a 100644 --- a/front/src/pages/people/PersonShow.tsx +++ b/front/src/pages/people/PersonShow.tsx @@ -55,7 +55,7 @@ export function PersonShow() { icon={} hasBackButton isFavorite={isFavorite} - onFavouriteButtonClick={handleFavoriteButtonClick} + onFavoriteButtonClick={handleFavoriteButtonClick} > diff --git a/server/src/database/migrations/20230810222531_add_favorites/migration.sql b/server/src/database/migrations/20230810222531_add_favorites/migration.sql new file mode 100644 index 000000000..874c23506 --- /dev/null +++ b/server/src/database/migrations/20230810222531_add_favorites/migration.sql @@ -0,0 +1,19 @@ +-- CreateTable +CREATE TABLE "favorites" ( + "id" TEXT NOT NULL, + "workspaceId" TEXT, + "personId" TEXT, + "companyId" TEXT, + "workspaceMemberId" TEXT, + + CONSTRAINT "favorites_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "favorites" ADD CONSTRAINT "favorites_personId_fkey" FOREIGN KEY ("personId") REFERENCES "people"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "favorites" ADD CONSTRAINT "favorites_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "companies"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "favorites" ADD CONSTRAINT "favorites_workspaceMemberId_fkey" FOREIGN KEY ("workspaceMemberId") REFERENCES "workspace_members"("id") ON DELETE SET NULL ON UPDATE CASCADE;