* refactor: move booking-audit client components from packages/features to apps/web/modules This is part of the larger effort to move tRPC-dependent UI components from packages/features to apps/web/modules to eliminate circular dependencies. Changes: - Move BookingHistory.tsx and BookingHistoryPage.tsx to apps/web/modules/booking-audit/components/ - Update imports in apps/web to use the new location Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move formbricks client from packages/features to apps/web/modules Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move hooks and stores from packages/features to apps/web/modules - Move useAppsData hook from packages/features/apps/hooks to apps/web/modules/apps/hooks - Move onboardingStore from packages/features/ee/organizations/lib to apps/web/modules/ee/organizations/lib - Move useWelcomeModal hook from packages/features/ee/organizations/hooks to apps/web/modules/ee/organizations/hooks - Move useAgentsData hook from packages/features/ee/workflows/hooks to apps/web/modules/ee/workflows/hooks - Update all import paths in consuming files Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move onboardingStore test file to apps/web/modules Co-Authored-By: benny@cal.com <sldisek783@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import { useFormContext } from "react-hook-form";
|
|
|
|
import type { GetAppData, SetAppData } from "@calcom/app-store/EventTypeAppContext";
|
|
import type { EventTypeAppsList } from "@calcom/app-store/utils";
|
|
import type { FormValues } from "@calcom/features/eventtypes/lib/types";
|
|
|
|
const useAppsData = () => {
|
|
const formMethods = useFormContext<FormValues>();
|
|
const allAppsData = formMethods.watch("metadata")?.apps || {};
|
|
|
|
const setAllAppsData = (_allAppsData: typeof allAppsData) => {
|
|
formMethods.setValue(
|
|
"metadata",
|
|
{
|
|
...formMethods.getValues("metadata"),
|
|
apps: _allAppsData,
|
|
},
|
|
{ shouldDirty: true }
|
|
);
|
|
};
|
|
|
|
const getAppDataGetter = (appId: EventTypeAppsList): GetAppData => {
|
|
return function (key) {
|
|
const appData = allAppsData[appId as keyof typeof allAppsData] || {};
|
|
if (key) {
|
|
return appData[key as keyof typeof appData];
|
|
}
|
|
return appData;
|
|
};
|
|
};
|
|
|
|
const eventTypeFormMetadata = formMethods.getValues("metadata");
|
|
|
|
const getAppDataSetter = (
|
|
appId: EventTypeAppsList,
|
|
appCategories: string[],
|
|
credentialId?: number
|
|
): SetAppData => {
|
|
return function (key, value) {
|
|
// Always get latest data available in Form because consequent calls to setData would update the Form but not allAppsData(it would update during next render)
|
|
const allAppsDataFromForm = formMethods.getValues("metadata")?.apps || {};
|
|
const appData = allAppsDataFromForm[appId];
|
|
setAllAppsData({
|
|
...allAppsDataFromForm,
|
|
[appId]: {
|
|
...appData,
|
|
[key]: value,
|
|
credentialId,
|
|
appCategories,
|
|
},
|
|
});
|
|
};
|
|
};
|
|
|
|
return { getAppDataGetter, getAppDataSetter, eventTypeFormMetadata };
|
|
};
|
|
|
|
export default useAppsData;
|