nitin
2025-01-21 19:00:59 +05:30
committed by GitHub
parent 86b0a7952b
commit 50f36e345e
31 changed files with 710 additions and 6 deletions
@@ -0,0 +1,66 @@
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { labPublicFeatureFlagsState } from '@/client-config/states/labPublicFeatureFlagsState';
import { useState } from 'react';
import { useRecoilState, useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-ui';
import {
FeatureFlagKey,
useUpdateLabPublicFeatureFlagMutation,
} from '~/generated/graphql';
export const useLabPublicFeatureFlags = () => {
const [error, setError] = useState<string | null>(null);
const [currentWorkspace, setCurrentWorkspace] = useRecoilState(
currentWorkspaceState,
);
const labPublicFeatureFlags = useRecoilValue(labPublicFeatureFlagsState);
const [updateLabPublicFeatureFlag] = useUpdateLabPublicFeatureFlagMutation();
const handleLabPublicFeatureFlagUpdate = async (
publicFeatureFlag: FeatureFlagKey,
value: boolean,
) => {
if (!isDefined(currentWorkspace)) {
setError('No workspace selected');
return false;
}
setError(null);
const response = await updateLabPublicFeatureFlag({
variables: {
input: {
publicFeatureFlag,
value,
},
},
onError: (error) => {
setError(error.message);
},
});
if (isDefined(response.data)) {
setCurrentWorkspace({
...currentWorkspace,
featureFlags: currentWorkspace.featureFlags?.map((flag) =>
flag.key === publicFeatureFlag ? { ...flag, value } : flag,
),
});
}
return !!response.data;
};
return {
labPublicFeatureFlags: labPublicFeatureFlags.map((flag) => ({
...flag,
value:
currentWorkspace?.featureFlags?.find(
(workspaceFlag) => workspaceFlag.key === flag.key,
)?.value ?? false,
})),
handleLabPublicFeatureFlagUpdate,
error,
};
};