8414 add records selection context inside the command menu (#8610)
Closes #8414 https://github.com/user-attachments/assets/a6aeb50a-b57d-43db-a839-4627c49b4155
This commit is contained in:
@ -11,10 +11,10 @@ export const MainContextStoreComponentInstanceIdSetterEffect = () => {
|
||||
const context = useContext(ContextStoreComponentInstanceContext);
|
||||
|
||||
useEffect(() => {
|
||||
setMainContextStoreComponentInstanceId(context?.instanceId ?? null);
|
||||
setMainContextStoreComponentInstanceId(context?.instanceId ?? 'app');
|
||||
|
||||
return () => {
|
||||
setMainContextStoreComponentInstanceId(null);
|
||||
setMainContextStoreComponentInstanceId('app');
|
||||
};
|
||||
}, [context, setMainContextStoreComponentInstanceId]);
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
import { contextStoreCurrentObjectMetadataIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdComponentState';
|
||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||
|
||||
export const useContextStoreCurrentObjectMetadataIdOrThrow = (
|
||||
instanceId?: string,
|
||||
) => {
|
||||
const contextStoreCurrentObjectMetadataIdComponent =
|
||||
useRecoilComponentValueV2(
|
||||
contextStoreCurrentObjectMetadataIdComponentState,
|
||||
instanceId,
|
||||
);
|
||||
|
||||
if (!contextStoreCurrentObjectMetadataIdComponent) {
|
||||
throw new Error('contextStoreCurrentObjectMetadataIdComponent is not set');
|
||||
}
|
||||
|
||||
return contextStoreCurrentObjectMetadataIdComponent;
|
||||
};
|
||||
@ -0,0 +1,58 @@
|
||||
import { useContextStoreCurrentObjectMetadataIdOrThrow } from '@/context-store/hooks/useContextStoreCurrentObjectMetadataIdOrThrow';
|
||||
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
|
||||
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
|
||||
import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters';
|
||||
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||
|
||||
export const useContextStoreSelectedRecords = ({
|
||||
instanceId,
|
||||
limit = 3,
|
||||
}: {
|
||||
instanceId?: string;
|
||||
limit?: number;
|
||||
}) => {
|
||||
const objectMetadataId =
|
||||
useContextStoreCurrentObjectMetadataIdOrThrow(instanceId);
|
||||
|
||||
const { objectMetadataItem } = useObjectMetadataItemById({
|
||||
objectId: objectMetadataId,
|
||||
});
|
||||
|
||||
const contextStoreTargetedRecordsRule = useRecoilComponentValueV2(
|
||||
contextStoreTargetedRecordsRuleComponentState,
|
||||
instanceId,
|
||||
);
|
||||
|
||||
const contextStoreFilters = useRecoilComponentValueV2(
|
||||
contextStoreFiltersComponentState,
|
||||
instanceId,
|
||||
);
|
||||
|
||||
const queryFilter = computeContextStoreFilters(
|
||||
contextStoreTargetedRecordsRule,
|
||||
contextStoreFilters,
|
||||
objectMetadataItem,
|
||||
);
|
||||
|
||||
const { records, loading, totalCount } = useFindManyRecords({
|
||||
objectNameSingular: objectMetadataItem.nameSingular,
|
||||
filter: queryFilter,
|
||||
orderBy: [
|
||||
{
|
||||
position: 'AscNullsFirst',
|
||||
},
|
||||
],
|
||||
skip:
|
||||
contextStoreTargetedRecordsRule.mode === 'selection' &&
|
||||
contextStoreTargetedRecordsRule.selectedRecordIds.length === 0,
|
||||
limit,
|
||||
});
|
||||
|
||||
return {
|
||||
records,
|
||||
totalCount,
|
||||
loading,
|
||||
};
|
||||
};
|
||||
@ -1,8 +1,6 @@
|
||||
import { createState } from 'twenty-ui';
|
||||
|
||||
export const mainContextStoreComponentInstanceIdState = createState<
|
||||
string | null
|
||||
>({
|
||||
export const mainContextStoreComponentInstanceIdState = createState<string>({
|
||||
key: 'mainContextStoreComponentInstanceIdState',
|
||||
defaultValue: null,
|
||||
defaultValue: 'app',
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user