diff --git a/web/packages/new/photos/components/gallery/index.tsx b/web/packages/new/photos/components/gallery/index.tsx index 3209f9da37..bcf9314789 100644 --- a/web/packages/new/photos/components/gallery/index.tsx +++ b/web/packages/new/photos/components/gallery/index.tsx @@ -9,10 +9,12 @@ import { CenteredBox } from "@/base/components/mui/Container"; import type { SearchOption } from "@/new/photos/services/search/types"; -import { Typography } from "@mui/material"; +import { Paper, Stack, Typography } from "@mui/material"; import { t } from "i18next"; -import React from "react"; +import React, { useState } from "react"; +import { EnableML, FaceConsent } from "../sidebar/MLSettings"; import { useMLStatusSnapshot } from "../utils/use-snapshot"; +import { useWrapAsyncOperation } from "../utils/use-wrap-async"; import { GalleryItemsHeaderAdapter, GalleryItemsSummary } from "./ListHeader"; /** @@ -64,22 +66,39 @@ export const PeopleEmptyState: React.FC = () => { } }; -export const PeopleEmptyStateDisabled: React.FC = () => ( - - - -); +// import { FormPaper } from "@/base/components/FormPaper"; + +export const PeopleEmptyStateDisabled: React.FC = () => { + const [openFaceConsent, setOpenFaceConsent] = useState(false); + + const handleEnableML = () => setOpenFaceConsent(true); + + const handleConsent = useWrapAsyncOperation(async () => { + await enableML(); + // Close the FaceConsent drawer, come back to ourselves. + setOpenFaceConsent(false); + }); + + return ( + + + + + + setOpenFaceConsent(false)} + onRootClose={() => {}} + onConsent={handleConsent} + /> + + ); +}; export const PeopleEmptyStateMessage: React.FC = ({ children, diff --git a/web/packages/new/photos/components/sidebar/MLSettings.tsx b/web/packages/new/photos/components/sidebar/MLSettings.tsx index cc034cab2b..108eee09f5 100644 --- a/web/packages/new/photos/components/sidebar/MLSettings.tsx +++ b/web/packages/new/photos/components/sidebar/MLSettings.tsx @@ -54,7 +54,7 @@ export const MLSettings: React.FC = ({ if (!mlStatus) { component = ; } else if (mlStatus.phase == "disabled") { - component = ; + component = ; } else { component = ( @@ -98,9 +98,16 @@ const Loading: React.FC = () => { interface EnableMLProps { /** Called when the user enables ML. */ onEnable: () => void; + /** + * If true, a footnote describing the magic search feature will be shown. + */ + showMagicSearchHint?: boolean; } -export const EnableML: React.FC = ({ onEnable }) => { +export const EnableML: React.FC = ({ + onEnable, + showMagicSearchHint, +}) => { const moreDetails = () => openURL("https://help.ente.io/photos/features/machine-learning"); @@ -118,9 +125,11 @@ export const EnableML: React.FC = ({ onEnable }) => { {t("more_details")} - - {t("ml_search_footnote")} - + {showMagicSearchHint && ( + + {t("ml_search_footnote")} + + )} ); }; @@ -130,7 +139,7 @@ type FaceConsentProps = NestedSidebarDrawerVisibilityProps & { onConsent: () => void; }; -const FaceConsent: React.FC = ({ +export const FaceConsent: React.FC = ({ open, onClose, onRootClose,