Renamed nullable utils into isDefined and isUndefinedOrNull (#4402)
* Renamed nullable utils into isDefined and isUndefinedOrNull
This commit is contained in:
@ -18,8 +18,8 @@ import { IconCheckbox } from '@/ui/display/icon';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
||||
import { useGetWorkspaceFromInviteHashLazyQuery } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
import { useIsMatchingLocation } from '../hooks/useIsMatchingLocation';
|
||||
|
||||
@ -83,13 +83,13 @@ export const PageChangeEffect = () => {
|
||||
) {
|
||||
navigate(AppPath.SignIn);
|
||||
} else if (
|
||||
isNonNullable(onboardingStatus) &&
|
||||
isDefined(onboardingStatus) &&
|
||||
onboardingStatus === OnboardingStatus.Incomplete &&
|
||||
!isMatchingLocation(AppPath.PlanRequired)
|
||||
) {
|
||||
navigate(AppPath.PlanRequired);
|
||||
} else if (
|
||||
isNonNullable(onboardingStatus) &&
|
||||
isDefined(onboardingStatus) &&
|
||||
[OnboardingStatus.Unpaid, OnboardingStatus.Canceled].includes(
|
||||
onboardingStatus,
|
||||
) &&
|
||||
@ -124,7 +124,7 @@ export const PageChangeEffect = () => {
|
||||
inviteHash,
|
||||
},
|
||||
onCompleted: (data) => {
|
||||
if (isNullable(data.findWorkspaceFromInviteHash)) {
|
||||
if (isUndefinedOrNull(data.findWorkspaceFromInviteHash)) {
|
||||
navigateToSignUp();
|
||||
}
|
||||
},
|
||||
|
||||
@ -12,8 +12,8 @@ import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
import { Button } from '@/ui/input/button/components/Button';
|
||||
import { AppThemeProvider } from '@/ui/theme/components/AppThemeProvider';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
import { AttachmentIcon } from '../files/components/AttachmentIcon';
|
||||
import { AttachmentType } from '../files/types/Attachment';
|
||||
@ -80,7 +80,7 @@ const FileBlockRenderer = ({
|
||||
const inputFileRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
const handleUploadAttachment = async (file: File) => {
|
||||
if (isNullable(file)) {
|
||||
if (isUndefinedOrNull(file)) {
|
||||
return '';
|
||||
}
|
||||
const fileUrl = await editor.uploadFile?.(file);
|
||||
@ -96,8 +96,7 @@ const FileBlockRenderer = ({
|
||||
inputFileRef?.current?.click?.();
|
||||
};
|
||||
const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||
if (isNonNullable(e.target.files))
|
||||
handleUploadAttachment?.(e.target.files[0]);
|
||||
if (isDefined(e.target.files)) handleUploadAttachment?.(e.target.files[0]);
|
||||
};
|
||||
|
||||
if (isNonEmptyString(block.props.url)) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { CalendarEvent } from '@/activities/calendar/types/CalendarEvent';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { sortAsc } from '~/utils/sort';
|
||||
|
||||
export const sortCalendarEventsAsc = (
|
||||
@ -13,8 +13,8 @@ export const sortCalendarEventsAsc = (
|
||||
|
||||
if (
|
||||
startsAtSort === 0 &&
|
||||
isNonNullable(calendarEventA.endsAt) &&
|
||||
isNonNullable(calendarEventB.endsAt)
|
||||
isDefined(calendarEventA.endsAt) &&
|
||||
isDefined(calendarEventB.endsAt)
|
||||
) {
|
||||
return sortAsc(
|
||||
calendarEventA.endsAt.getTime(),
|
||||
|
||||
@ -25,8 +25,8 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { isNonTextWritingKey } from '@/ui/utilities/hotkey/utils/isNonTextWritingKey';
|
||||
import { REACT_APP_SERVER_BASE_URL } from '~/config';
|
||||
import { FileFolder, useUploadFileMutation } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
import { blockSpecs } from '../blocks/blockSpecs';
|
||||
import { getSlashMenu } from '../blocks/slashMenu';
|
||||
@ -80,7 +80,7 @@ export const ActivityBodyEditor = ({
|
||||
const { upsertActivity } = useUpsertActivity();
|
||||
|
||||
const persistBodyDebounced = useDebouncedCallback((newBody: string) => {
|
||||
if (isNonNullable(activity)) {
|
||||
if (isDefined(activity)) {
|
||||
upsertActivity({
|
||||
activity,
|
||||
input: {
|
||||
@ -92,7 +92,7 @@ export const ActivityBodyEditor = ({
|
||||
|
||||
const persistTitleAndBodyDebounced = useDebouncedCallback(
|
||||
(newTitle: string, newBody: string) => {
|
||||
if (isNonNullable(activity)) {
|
||||
if (isDefined(activity)) {
|
||||
upsertActivity({
|
||||
activity,
|
||||
input: {
|
||||
@ -126,7 +126,7 @@ export const ActivityBodyEditor = ({
|
||||
const [uploadFile] = useUploadFileMutation();
|
||||
|
||||
const handleUploadAttachment = async (file: File): Promise<string> => {
|
||||
if (isNullable(file)) {
|
||||
if (isUndefinedOrNull(file)) {
|
||||
return '';
|
||||
}
|
||||
const result = await uploadFile({
|
||||
@ -228,7 +228,7 @@ export const ActivityBodyEditor = ({
|
||||
if (isNonEmptyString(activityBody) && activityBody !== '{}') {
|
||||
return JSON.parse(activityBody);
|
||||
} else if (
|
||||
isNonNullable(activity) &&
|
||||
isDefined(activity) &&
|
||||
isNonEmptyString(activity.body) &&
|
||||
activity?.body !== '{}'
|
||||
) {
|
||||
@ -253,7 +253,7 @@ export const ActivityBodyEditor = ({
|
||||
const handleImagePaste = async (event: ClipboardEvent) => {
|
||||
const clipboardItems = event.clipboardData?.items;
|
||||
|
||||
if (isNonNullable(clipboardItems)) {
|
||||
if (isDefined(clipboardItems)) {
|
||||
for (let i = 0; i < clipboardItems.length; i++) {
|
||||
if (clipboardItems[i].kind === 'file') {
|
||||
const isImage = clipboardItems[i].type.match('^image/');
|
||||
@ -268,7 +268,7 @@ export const ActivityBodyEditor = ({
|
||||
return;
|
||||
}
|
||||
|
||||
if (isNonNullable(isImage)) {
|
||||
if (isDefined(isImage)) {
|
||||
editor?.insertBlocks(
|
||||
[
|
||||
{
|
||||
@ -334,7 +334,7 @@ export const ActivityBodyEditor = ({
|
||||
const currentBlockContent = blockIdentifier?.content;
|
||||
|
||||
if (
|
||||
isNonNullable(currentBlockContent) &&
|
||||
isDefined(currentBlockContent) &&
|
||||
isArray(currentBlockContent) &&
|
||||
currentBlockContent.length === 0
|
||||
) {
|
||||
@ -346,7 +346,7 @@ export const ActivityBodyEditor = ({
|
||||
}
|
||||
|
||||
if (
|
||||
isNonNullable(currentBlockContent) &&
|
||||
isDefined(currentBlockContent) &&
|
||||
isArray(currentBlockContent) &&
|
||||
currentBlockContent[0] &&
|
||||
currentBlockContent[0].type === 'text'
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRecoilState } from 'recoil';
|
||||
|
||||
import { activityBodyFamilyState } from '@/activities/states/activityBodyFamilyState';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const ActivityBodyEffect = ({ activityId }: { activityId: string }) => {
|
||||
const [activityFromStore] = useRecoilState(
|
||||
@ -17,7 +17,7 @@ export const ActivityBodyEffect = ({ activityId }: { activityId: string }) => {
|
||||
useEffect(() => {
|
||||
if (
|
||||
activityBody === '' &&
|
||||
isNonNullable(activityFromStore) &&
|
||||
isDefined(activityFromStore) &&
|
||||
activityBody !== activityFromStore.body
|
||||
) {
|
||||
setActivityBody(activityFromStore.body);
|
||||
|
||||
@ -11,7 +11,7 @@ import { Activity } from '@/activities/types/Activity';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { RIGHT_DRAWER_CLICK_OUTSIDE_LISTENER_ID } from '@/ui/layout/right-drawer/constants/RightDrawerClickOutsideListener';
|
||||
import { useClickOutsideListener } from '@/ui/utilities/pointer-event/hooks/useClickOutsideListener';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const ActivityEditorEffect = ({
|
||||
activityId,
|
||||
@ -58,7 +58,7 @@ export const ActivityEditorEffect = ({
|
||||
return;
|
||||
}
|
||||
|
||||
if (isActivityInCreateMode && isNonNullable(activity)) {
|
||||
if (isActivityInCreateMode && isDefined(activity)) {
|
||||
if (canCreateActivity) {
|
||||
upsertActivity({
|
||||
activity,
|
||||
@ -72,7 +72,7 @@ export const ActivityEditorEffect = ({
|
||||
}
|
||||
|
||||
set(isActivityInCreateModeState(), false);
|
||||
} else if (isNonNullable(activity)) {
|
||||
} else if (isDefined(activity)) {
|
||||
if (
|
||||
activity.title !== activityTitle ||
|
||||
activity.body !== activityBody
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell';
|
||||
import { PropertyBox } from '@/object-record/record-inline-cell/property-box/components/PropertyBox';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledPropertyBox = styled(PropertyBox)`
|
||||
padding: 0;
|
||||
@ -36,7 +36,7 @@ export const ActivityEditorFields = ({
|
||||
const upsertActivityMutation = async ({
|
||||
variables,
|
||||
}: RecordUpdateHookParams) => {
|
||||
if (isNonNullable(activityFromStore)) {
|
||||
if (isDefined(activityFromStore)) {
|
||||
await upsertActivity({
|
||||
activity: activityFromStore as Activity,
|
||||
input: variables.updateOneRecordInput,
|
||||
|
||||
@ -22,7 +22,7 @@ import {
|
||||
} from '@/ui/input/components/Checkbox';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledEditableTitleInput = styled.input<{
|
||||
completed: boolean;
|
||||
@ -166,7 +166,7 @@ export const ActivityTitle = ({ activityId }: ActivityTitleProps) => {
|
||||
});
|
||||
};
|
||||
|
||||
const completed = isNonNullable(activity.completedAt);
|
||||
const completed = isDefined(activity.completedAt);
|
||||
|
||||
return (
|
||||
<StyledContainer>
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRecoilState } from 'recoil';
|
||||
|
||||
import { activityTitleFamilyState } from '@/activities/states/activityTitleFamilyState';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const ActivityTitleEffect = ({ activityId }: { activityId: string }) => {
|
||||
const [activityFromStore] = useRecoilState(
|
||||
@ -17,7 +17,7 @@ export const ActivityTitleEffect = ({ activityId }: { activityId: string }) => {
|
||||
useEffect(() => {
|
||||
if (
|
||||
activityTitle === '' &&
|
||||
isNonNullable(activityFromStore) &&
|
||||
isDefined(activityFromStore) &&
|
||||
activityTitle !== activityFromStore.title
|
||||
) {
|
||||
setActivityTitle(activityFromStore.title);
|
||||
|
||||
@ -33,7 +33,7 @@ import {
|
||||
TimelineThread,
|
||||
TimelineThreadsWithTotal,
|
||||
} from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledContainer = styled.div`
|
||||
display: flex;
|
||||
@ -141,7 +141,7 @@ export const EmailThreads = ({
|
||||
}
|
||||
};
|
||||
|
||||
if (isNonNullable(error)) {
|
||||
if (isDefined(error)) {
|
||||
enqueueSnackBar(error.message || 'Error loading email threads', {
|
||||
variant: 'error',
|
||||
});
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
import { EmailThreadMessageParticipant } from '@/activities/emails/types/EmailThreadMessageParticipant';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const getDisplayNameFromParticipant = ({
|
||||
participant,
|
||||
@ -10,14 +10,14 @@ export const getDisplayNameFromParticipant = ({
|
||||
participant: EmailThreadMessageParticipant;
|
||||
shouldUseFullName?: boolean;
|
||||
}) => {
|
||||
if (isNonNullable(participant.person)) {
|
||||
if (isDefined(participant.person)) {
|
||||
return (
|
||||
`${participant.person?.name?.firstName}` +
|
||||
(shouldUseFullName ? ` ${participant.person?.name?.lastName}` : '')
|
||||
);
|
||||
}
|
||||
|
||||
if (isNonNullable(participant.workspaceMember)) {
|
||||
if (isDefined(participant.workspaceMember)) {
|
||||
return (
|
||||
participant.workspaceMember?.name?.firstName +
|
||||
(shouldUseFullName
|
||||
|
||||
@ -16,7 +16,7 @@ import {
|
||||
AnimatedPlaceholderEmptyTextContainer,
|
||||
AnimatedPlaceholderEmptyTitle,
|
||||
} from '@/ui/layout/animated-placeholder/components/EmptyPlaceholderStyled';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledAttachmentsContainer = styled.div`
|
||||
display: flex;
|
||||
@ -47,7 +47,7 @@ export const Attachments = ({
|
||||
const [isDraggingFile, setIsDraggingFile] = useState(false);
|
||||
|
||||
const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||
if (isNonNullable(e.target.files)) onUploadFile?.(e.target.files[0]);
|
||||
if (isDefined(e.target.files)) onUploadFile?.(e.target.files[0]);
|
||||
};
|
||||
|
||||
const handleUploadFileClick = () => {
|
||||
|
||||
@ -8,7 +8,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
|
||||
import { getEmptyPageInfo } from '@/object-record/cache/utils/getEmptyPageInfo';
|
||||
import { useMapConnectionToRecords } from '@/object-record/hooks/useMapConnectionToRecords';
|
||||
import { ObjectRecordConnection } from '@/object-record/types/ObjectRecordConnection';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useActivityConnectionUtils = () => {
|
||||
const mapConnectionToRecords = useMapConnectionToRecords();
|
||||
@ -19,7 +19,7 @@ export const useActivityConnectionUtils = () => {
|
||||
comments: ObjectRecordConnection<Comment>;
|
||||
},
|
||||
) => {
|
||||
if (!isNonNullable(activityWithConnections)) {
|
||||
if (!isDefined(activityWithConnections)) {
|
||||
throw new Error('Activity with connections is not defined');
|
||||
}
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { Nullable } from '~/types/Nullable';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useActivityTargetObjectRecords = ({
|
||||
activityId,
|
||||
@ -31,7 +31,7 @@ export const useActivityTargetObjectRecords = ({
|
||||
.map<Nullable<ActivityTargetWithTargetRecord>>((activityTarget) => {
|
||||
const correspondingObjectMetadataItem = objectMetadataItems.find(
|
||||
(objectMetadataItem) =>
|
||||
isNonNullable(activityTarget[objectMetadataItem.nameSingular]) &&
|
||||
isDefined(activityTarget[objectMetadataItem.nameSingular]) &&
|
||||
!objectMetadataItem.isSystem,
|
||||
);
|
||||
|
||||
@ -47,7 +47,7 @@ export const useActivityTargetObjectRecords = ({
|
||||
targetObjectNameSingular: correspondingObjectMetadataItem.nameSingular,
|
||||
};
|
||||
})
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
return {
|
||||
activityTargetObjectRecords,
|
||||
|
||||
@ -6,7 +6,7 @@ import { triggerAttachRelationOptimisticEffect } from '@/apollo/optimistic-effec
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { getObjectMetadataItemByNameSingular } from '@/object-metadata/utils/getObjectMetadataItemBySingularName';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useAttachRelationInBothDirections = () => {
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
@ -46,7 +46,7 @@ export const useAttachRelationInBothDirections = () => {
|
||||
(field) => field.name === fieldNameOnSourceRecord,
|
||||
);
|
||||
|
||||
if (!isNonNullable(fieldMetadataItemOnSourceRecord)) {
|
||||
if (!isDefined(fieldMetadataItemOnSourceRecord)) {
|
||||
throw new Error(
|
||||
`Field ${fieldNameOnSourceRecord} not found on object ${sourceObjectNameSingular}`,
|
||||
);
|
||||
@ -57,7 +57,7 @@ export const useAttachRelationInBothDirections = () => {
|
||||
objectMetadataItems,
|
||||
});
|
||||
|
||||
if (!isNonNullable(relationDefinition)) {
|
||||
if (!isDefined(relationDefinition)) {
|
||||
throw new Error(
|
||||
`Relation metadata not found for field ${fieldNameOnSourceRecord} on object ${sourceObjectNameSingular}`,
|
||||
);
|
||||
|
||||
@ -14,7 +14,7 @@ import { useCreateOneRecordInCache } from '@/object-record/hooks/useCreateOneRec
|
||||
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useCreateActivityInCache = () => {
|
||||
const { createManyRecordsInCache: createManyActivityTargetsInCache } =
|
||||
@ -71,7 +71,7 @@ export const useCreateActivityInCache = () => {
|
||||
|
||||
return targetObject;
|
||||
})
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
const activityTargetsToCreate =
|
||||
makeActivityTargetsToCreateFromTargetableObjects({
|
||||
|
||||
@ -5,7 +5,7 @@ import { ActivityType } from '@/activities/types/Activity';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
|
||||
import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ActivityTargetableObject } from '../types/ActivityTargetableEntity';
|
||||
|
||||
@ -47,9 +47,9 @@ export const useOpenCreateActivityDrawerForSelectedRowIds = (
|
||||
targetObjectRecord,
|
||||
};
|
||||
})
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
if (isNonNullable(relatedEntities)) {
|
||||
if (isDefined(relatedEntities)) {
|
||||
activityTargetableObjectArray =
|
||||
activityTargetableObjectArray.concat(relatedEntities);
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ import { objectShowPageTargetableObjectState } from '@/activities/timeline/state
|
||||
import { Activity } from '@/activities/types/Activity';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
// TODO: create a generic way to have records only in cache for create mode and delete them afterwards ?
|
||||
export const useUpsertActivity = () => {
|
||||
@ -85,7 +85,7 @@ export const useUpsertActivity = () => {
|
||||
makeActivityWithConnection(activityToCreate);
|
||||
|
||||
if (weAreOnTaskPage) {
|
||||
if (isNonNullable(activityWithConnection.completedAt)) {
|
||||
if (isDefined(activityWithConnection.completedAt)) {
|
||||
injectActivitiesQueries({
|
||||
activitiesFilters: currentCompletedTaskQueryVariables?.filter,
|
||||
activitiesOrderByVariables:
|
||||
@ -112,10 +112,7 @@ export const useUpsertActivity = () => {
|
||||
}
|
||||
|
||||
// Call optimistic effects
|
||||
if (
|
||||
weAreOnObjectShowPage &&
|
||||
isNonNullable(objectShowPageTargetableObject)
|
||||
) {
|
||||
if (weAreOnObjectShowPage && isDefined(objectShowPageTargetableObject)) {
|
||||
injectIntoTimelineActivitiesQueries({
|
||||
timelineTargetableObject: objectShowPageTargetableObject,
|
||||
activityToInject: activityWithConnection,
|
||||
@ -128,7 +125,7 @@ export const useUpsertActivity = () => {
|
||||
const injectOnlyInIdFilterForNotesQueries =
|
||||
activityWithConnection.type !== 'Note';
|
||||
|
||||
if (isNonNullable(currentCompletedTaskQueryVariables)) {
|
||||
if (isDefined(currentCompletedTaskQueryVariables)) {
|
||||
injectActivitiesQueries({
|
||||
activitiesFilters: currentCompletedTaskQueryVariables?.filter,
|
||||
activitiesOrderByVariables:
|
||||
@ -140,7 +137,7 @@ export const useUpsertActivity = () => {
|
||||
});
|
||||
}
|
||||
|
||||
if (isNonNullable(currentIncompleteTaskQueryVariables)) {
|
||||
if (isDefined(currentIncompleteTaskQueryVariables)) {
|
||||
injectActivitiesQueries({
|
||||
activitiesFilters:
|
||||
currentIncompleteTaskQueryVariables?.filter ?? {},
|
||||
@ -153,7 +150,7 @@ export const useUpsertActivity = () => {
|
||||
});
|
||||
}
|
||||
|
||||
if (isNonNullable(currentNotesQueryVariables)) {
|
||||
if (isDefined(currentNotesQueryVariables)) {
|
||||
injectActivitiesQueries({
|
||||
activitiesFilters: currentNotesQueryVariables?.filter,
|
||||
activitiesOrderByVariables: currentNotesQueryVariables?.orderBy,
|
||||
|
||||
@ -28,7 +28,7 @@ import { mapToRecordId } from '@/object-record/utils/mapToObjectId';
|
||||
import { IconPlus, IconTrash } from '@/ui/display/icon';
|
||||
import { IconButton } from '@/ui/input/button/components/IconButton';
|
||||
import { isRightDrawerOpenState } from '@/ui/layout/right-drawer/states/isRightDrawerOpenState';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledButtonContainer = styled.div`
|
||||
display: inline-flex;
|
||||
@ -111,10 +111,7 @@ export const ActivityActionBar = () => {
|
||||
setIsRightDrawerOpen(false);
|
||||
|
||||
if (isNonEmptyString(viewableActivityId)) {
|
||||
if (
|
||||
isActivityInCreateMode &&
|
||||
isNonNullable(temporaryActivityForEditor)
|
||||
) {
|
||||
if (isActivityInCreateMode && isDefined(temporaryActivityForEditor)) {
|
||||
deleteActivityFromCache(temporaryActivityForEditor);
|
||||
setTemporaryActivityForEditor(null);
|
||||
} else if (isNonEmptyString(activityIdInDrawer)) {
|
||||
@ -139,7 +136,7 @@ export const ActivityActionBar = () => {
|
||||
});
|
||||
} else if (
|
||||
weAreOnObjectShowPage &&
|
||||
isNonNullable(objectShowPageTargetableObject)
|
||||
isDefined(objectShowPageTargetableObject)
|
||||
) {
|
||||
removeFromActivitiesQueries({
|
||||
activityIdToRemove: viewableActivityId,
|
||||
@ -149,7 +146,7 @@ export const ActivityActionBar = () => {
|
||||
FIND_MANY_TIMELINE_ACTIVITIES_ORDER_BY,
|
||||
});
|
||||
|
||||
if (isNonNullable(currentCompletedTaskQueryVariables)) {
|
||||
if (isDefined(currentCompletedTaskQueryVariables)) {
|
||||
removeFromActivitiesQueries({
|
||||
activityIdToRemove: viewableActivityId,
|
||||
targetableObjects: [objectShowPageTargetableObject],
|
||||
@ -159,7 +156,7 @@ export const ActivityActionBar = () => {
|
||||
});
|
||||
}
|
||||
|
||||
if (isNonNullable(currentIncompleteTaskQueryVariables)) {
|
||||
if (isDefined(currentIncompleteTaskQueryVariables)) {
|
||||
removeFromActivitiesQueries({
|
||||
activityIdToRemove: viewableActivityId,
|
||||
targetableObjects: [objectShowPageTargetableObject],
|
||||
@ -170,7 +167,7 @@ export const ActivityActionBar = () => {
|
||||
});
|
||||
}
|
||||
|
||||
if (isNonNullable(currentNotesQueryVariables)) {
|
||||
if (isDefined(currentNotesQueryVariables)) {
|
||||
removeFromActivitiesQueries({
|
||||
activityIdToRemove: viewableActivityId,
|
||||
targetableObjects: [objectShowPageTargetableObject],
|
||||
@ -221,10 +218,7 @@ export const ActivityActionBar = () => {
|
||||
|
||||
const addActivity = () => {
|
||||
setIsRightDrawerOpen(false);
|
||||
if (
|
||||
isNonNullable(record) &&
|
||||
isNonNullable(objectShowPageTargetableObject)
|
||||
) {
|
||||
if (isDefined(record) && isDefined(objectShowPageTargetableObject)) {
|
||||
openCreateActivity({
|
||||
type: record?.type,
|
||||
customAssignee: record?.assignee,
|
||||
|
||||
@ -12,7 +12,7 @@ import { Activity } from '@/activities/types/Activity';
|
||||
import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
|
||||
import { sortObjectRecordByDateField } from '@/object-record/utils/sortObjectRecordByDateField';
|
||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const TimelineQueryEffect = ({
|
||||
targetableObject,
|
||||
@ -31,7 +31,7 @@ export const TimelineQueryEffect = ({
|
||||
targetableObjects: [targetableObject],
|
||||
activitiesFilters: {},
|
||||
activitiesOrderByVariables: FIND_MANY_TIMELINE_ACTIVITIES_ORDER_BY,
|
||||
skip: !isNonNullable(targetableObject),
|
||||
skip: !isDefined(targetableObject),
|
||||
});
|
||||
|
||||
const [timelineActivitiesNetworking, setTimelineActivitiesNetworking] =
|
||||
@ -41,7 +41,7 @@ export const TimelineQueryEffect = ({
|
||||
useRecoilState(timelineActivitiesForGroupState());
|
||||
|
||||
useEffect(() => {
|
||||
if (!isNonNullable(targetableObject)) {
|
||||
if (!isDefined(targetableObject)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getR
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { sortByAscString } from '~/utils/array/sortByAscString';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useTimelineActivities = ({
|
||||
targetableObject,
|
||||
@ -27,7 +27,7 @@ export const useTimelineActivities = ({
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (isNonNullable(targetableObject)) {
|
||||
if (isDefined(targetableObject)) {
|
||||
setObjectShowPageTargetableObject(targetableObject);
|
||||
}
|
||||
}, [targetableObject, setObjectShowPageTargetableObject]);
|
||||
@ -100,7 +100,7 @@ export const useTimelineActivities = ({
|
||||
const activities = activitiesWithConnection
|
||||
?.map(makeActivityWithoutConnection as any)
|
||||
.map(({ activity }: any) => activity as any)
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
return {
|
||||
activities,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Activity } from '@/activities/types/Activity';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export type ActivityForActivityGroup = Pick<Activity, 'id' | 'createdAt'>;
|
||||
|
||||
@ -22,7 +22,7 @@ export const groupActivitiesByMonth = (
|
||||
const matchingGroup = acitivityGroups.find(
|
||||
(x) => x.year === year && x.month === month,
|
||||
);
|
||||
if (isNonNullable(matchingGroup)) {
|
||||
if (isDefined(matchingGroup)) {
|
||||
matchingGroup.items.push(activity);
|
||||
} else {
|
||||
acitivityGroups.push({
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ActivityTargetableObject } from '../types/ActivityTargetableEntity';
|
||||
|
||||
@ -11,7 +11,7 @@ export const flattenTargetableObjectsAndTheirRelatedTargetableObjects = (
|
||||
[]) {
|
||||
flattenedTargetableObjects.push(targetableObject);
|
||||
|
||||
if (isNonNullable(targetableObject.relatedTargetableObjects)) {
|
||||
if (isDefined(targetableObject.relatedTargetableObjects)) {
|
||||
for (const relatedEntity of targetableObject.relatedTargetableObjects ??
|
||||
[]) {
|
||||
flattenedTargetableObjects.push(relatedEntity);
|
||||
|
||||
@ -9,7 +9,7 @@ import { AppPath } from '@/types/AppPath';
|
||||
import { REACT_APP_SERVER_BASE_URL } from '~/config';
|
||||
import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation';
|
||||
import { useUpdateEffect } from '~/hooks/useUpdateEffect';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ApolloFactory } from '../services/apollo.factory';
|
||||
|
||||
@ -58,7 +58,7 @@ export const useApolloFactory = () => {
|
||||
}, [setTokenPair, isDebugMode]);
|
||||
|
||||
useUpdateEffect(() => {
|
||||
if (isNonNullable(apolloRef.current)) {
|
||||
if (isDefined(apolloRef.current)) {
|
||||
apolloRef.current.updateTokenPair(tokenPair);
|
||||
}
|
||||
}, [tokenPair]);
|
||||
|
||||
@ -4,7 +4,7 @@ import { ReadFieldFunction } from '@apollo/client/cache/core/types/common';
|
||||
import { CachedObjectRecordEdge } from '@/apollo/types/CachedObjectRecordEdge';
|
||||
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||
import { OrderByField } from '@/object-metadata/types/OrderByField';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { sortAsc, sortDesc, sortNullsFirst, sortNullsLast } from '~/utils/sort';
|
||||
|
||||
export const sortCachedObjectEdges = ({
|
||||
@ -31,7 +31,7 @@ export const sortCachedObjectEdges = ({
|
||||
orderByFieldName,
|
||||
recordFromCache,
|
||||
) ?? null;
|
||||
const isSubFieldFilter = isNonNullable(fieldValue) && !!orderBySubFieldName;
|
||||
const isSubFieldFilter = isDefined(fieldValue) && !!orderBySubFieldName;
|
||||
|
||||
if (!isSubFieldFilter) return fieldValue as string | number | null;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import { ApolloCache, StoreObject } from '@apollo/client';
|
||||
|
||||
import { isCachedObjectRecordConnection } from '@/apollo/optimistic-effect/utils/isCachedObjectRecordConnection';
|
||||
import { CachedObjectRecordEdge } from '@/apollo/types/CachedObjectRecordEdge';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const triggerAttachRelationOptimisticEffect = ({
|
||||
@ -43,7 +43,7 @@ export const triggerAttachRelationOptimisticEffect = ({
|
||||
__typename: sourceRecordTypeName,
|
||||
});
|
||||
|
||||
if (!isNonNullable(sourceRecordReference)) {
|
||||
if (!isDefined(sourceRecordReference)) {
|
||||
return targetRecordFieldValue;
|
||||
}
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ import { CachedObjectRecord } from '@/apollo/types/CachedObjectRecord';
|
||||
import { CachedObjectRecordEdge } from '@/apollo/types/CachedObjectRecordEdge';
|
||||
import { CachedObjectRecordQueryVariables } from '@/apollo/types/CachedObjectRecordQueryVariables';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName';
|
||||
|
||||
export const triggerDeleteRecordsOptimisticEffect = ({
|
||||
@ -68,7 +68,7 @@ export const triggerDeleteRecordsOptimisticEffect = ({
|
||||
|
||||
// TODO: same as in update, should we trigger DELETE ?
|
||||
if (
|
||||
isNonNullable(rootQueryVariables?.first) &&
|
||||
isDefined(rootQueryVariables?.first) &&
|
||||
cachedEdges?.length === rootQueryVariables.first
|
||||
) {
|
||||
return DELETE;
|
||||
|
||||
@ -9,7 +9,7 @@ import { CachedObjectRecordQueryVariables } from '@/apollo/types/CachedObjectRec
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { getEdgeTypename } from '@/object-record/cache/utils/getEdgeTypename';
|
||||
import { isRecordMatchingFilter } from '@/object-record/record-filter/utils/isRecordMatchingFilter';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName';
|
||||
|
||||
// TODO: add extensive unit tests for this function
|
||||
@ -71,7 +71,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
const rootQueryOrderBy = rootQueryVariables?.orderBy;
|
||||
const rootQueryLimit = rootQueryVariables?.first;
|
||||
|
||||
const shouldTryToMatchFilter = isNonNullable(rootQueryFilter);
|
||||
const shouldTryToMatchFilter = isDefined(rootQueryFilter);
|
||||
|
||||
if (shouldTryToMatchFilter) {
|
||||
const updatedRecordMatchesThisRootQueryFilter =
|
||||
@ -101,7 +101,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
if (updatedRecordShouldBeAddedToRootQueryEdges) {
|
||||
const updatedRecordNodeReference = toReference(updatedRecord);
|
||||
|
||||
if (isNonNullable(updatedRecordNodeReference)) {
|
||||
if (isDefined(updatedRecordNodeReference)) {
|
||||
rootQueryNextEdges.push({
|
||||
__typename: objectEdgeTypeName,
|
||||
node: updatedRecordNodeReference,
|
||||
@ -115,8 +115,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
}
|
||||
}
|
||||
|
||||
const rootQueryNextEdgesShouldBeSorted =
|
||||
isNonNullable(rootQueryOrderBy);
|
||||
const rootQueryNextEdgesShouldBeSorted = isDefined(rootQueryOrderBy);
|
||||
|
||||
if (
|
||||
rootQueryNextEdgesShouldBeSorted &&
|
||||
@ -129,7 +128,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
});
|
||||
}
|
||||
|
||||
const shouldLimitNextRootQueryEdges = isNonNullable(rootQueryLimit);
|
||||
const shouldLimitNextRootQueryEdges = isDefined(rootQueryLimit);
|
||||
|
||||
// TODO: not sure that we should trigger a DELETE here, as it will trigger a network request
|
||||
// Is it the responsibility of this optimistic effect function to delete a root query that will trigger a network request ?
|
||||
|
||||
@ -12,7 +12,7 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { ObjectRecordConnection } from '@/object-record/types/ObjectRecordConnection';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const triggerUpdateRelationsOptimisticEffect = ({
|
||||
cache,
|
||||
@ -36,7 +36,7 @@ export const triggerUpdateRelationsOptimisticEffect = ({
|
||||
}
|
||||
|
||||
const fieldDoesNotExist =
|
||||
isNonNullable(updatedSourceRecord) &&
|
||||
isDefined(updatedSourceRecord) &&
|
||||
!(fieldMetadataItemOnSourceRecord.name in updatedSourceRecord);
|
||||
|
||||
if (fieldDoesNotExist) {
|
||||
@ -87,7 +87,7 @@ export const triggerUpdateRelationsOptimisticEffect = ({
|
||||
? currentFieldValueOnSourceRecord.edges.map(
|
||||
({ node }) => node as CachedObjectRecord,
|
||||
)
|
||||
: [currentFieldValueOnSourceRecord].filter(isNonNullable);
|
||||
: [currentFieldValueOnSourceRecord].filter(isDefined);
|
||||
|
||||
const updatedFieldValueOnSourceRecordIsARecordConnection =
|
||||
isObjectRecordConnection(
|
||||
@ -100,11 +100,10 @@ export const triggerUpdateRelationsOptimisticEffect = ({
|
||||
? updatedFieldValueOnSourceRecord.edges.map(
|
||||
({ node }) => node as CachedObjectRecord,
|
||||
)
|
||||
: [updatedFieldValueOnSourceRecord].filter(isNonNullable);
|
||||
: [updatedFieldValueOnSourceRecord].filter(isDefined);
|
||||
|
||||
const shouldDetachSourceFromAllTargets =
|
||||
isNonNullable(currentSourceRecord) &&
|
||||
targetRecordsToDetachFrom.length > 0;
|
||||
isDefined(currentSourceRecord) && targetRecordsToDetachFrom.length > 0;
|
||||
|
||||
if (shouldDetachSourceFromAllTargets) {
|
||||
// TODO: see if we can de-hardcode this, put cascade delete in relation metadata item
|
||||
@ -136,7 +135,7 @@ export const triggerUpdateRelationsOptimisticEffect = ({
|
||||
}
|
||||
|
||||
const shouldAttachSourceToAllTargets =
|
||||
isNonNullable(updatedSourceRecord) && targetRecordsToAttachTo.length > 0;
|
||||
isDefined(updatedSourceRecord) && targetRecordsToAttachTo.length > 0;
|
||||
|
||||
if (shouldAttachSourceToAllTargets) {
|
||||
targetRecordsToAttachTo.forEach((targetRecordToAttachTo) =>
|
||||
|
||||
@ -14,7 +14,7 @@ import { createUploadLink } from 'apollo-upload-client';
|
||||
|
||||
import { renewToken } from '@/auth/services/AuthService';
|
||||
import { AuthTokenPair } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { logDebug } from '~/utils/logDebug';
|
||||
|
||||
import { ApolloManager } from '../types/apolloManager.interface';
|
||||
@ -78,7 +78,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
});
|
||||
const errorLink = onError(
|
||||
({ graphQLErrors, networkError, forward, operation }) => {
|
||||
if (isNonNullable(graphQLErrors)) {
|
||||
if (isDefined(graphQLErrors)) {
|
||||
onErrorCb?.(graphQLErrors);
|
||||
|
||||
for (const graphQLError of graphQLErrors) {
|
||||
@ -86,7 +86,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
return fromPromise(
|
||||
renewToken(uri, this.tokenPair)
|
||||
.then((tokens) => {
|
||||
if (isNonNullable(tokens)) {
|
||||
if (isDefined(tokens)) {
|
||||
onTokenPairChange?.(tokens);
|
||||
}
|
||||
})
|
||||
@ -101,7 +101,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
return fromPromise(
|
||||
renewToken(uri, this.tokenPair)
|
||||
.then((tokens) => {
|
||||
if (isNonNullable(tokens)) {
|
||||
if (isDefined(tokens)) {
|
||||
onTokenPairChange?.(tokens);
|
||||
}
|
||||
})
|
||||
@ -126,7 +126,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
}
|
||||
}
|
||||
|
||||
if (isNonNullable(networkError)) {
|
||||
if (isDefined(networkError)) {
|
||||
if (isDebugMode === true) {
|
||||
logDebug(`[Network error]: ${networkError}`);
|
||||
}
|
||||
@ -143,7 +143,7 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
isDebugMode ? logger : null,
|
||||
retryLink,
|
||||
httpLink,
|
||||
].filter(isNonNullable),
|
||||
].filter(isDefined),
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { ApolloLink, gql, Operation } from '@apollo/client';
|
||||
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { logDebug } from '~/utils/logDebug';
|
||||
import { logError } from '~/utils/logError';
|
||||
|
||||
@ -65,7 +65,7 @@ export const loggerLink = (getSchemaName: (operation: Operation) => string) =>
|
||||
|
||||
getGroup(!hasError)(...titleArgs);
|
||||
|
||||
if (isNonNullable(errors)) {
|
||||
if (isDefined(errors)) {
|
||||
errors.forEach((err: any) => {
|
||||
logDebug(
|
||||
`%c${err.message}`,
|
||||
@ -83,10 +83,10 @@ export const loggerLink = (getSchemaName: (operation: Operation) => string) =>
|
||||
|
||||
logDebug('QUERY', query);
|
||||
|
||||
if (isNonNullable(result.data)) {
|
||||
if (isDefined(result.data)) {
|
||||
logDebug('RESULT', result.data);
|
||||
}
|
||||
if (isNonNullable(errors)) {
|
||||
if (isDefined(errors)) {
|
||||
logDebug('ERRORS', errors);
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ export const loggerLink = (getSchemaName: (operation: Operation) => string) =>
|
||||
logDebug(
|
||||
`${operationType} ${schemaName}::${queryName} (in ${time} ms)`,
|
||||
);
|
||||
if (isNonNullable(errors)) {
|
||||
if (isDefined(errors)) {
|
||||
logError(errors);
|
||||
}
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ import {
|
||||
useSignUpMutation,
|
||||
useVerifyMutation,
|
||||
} from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { currentUserState } from '../states/currentUserState';
|
||||
import { tokenPairState } from '../states/tokenPairState';
|
||||
@ -60,7 +60,7 @@ export const useAuth = () => {
|
||||
},
|
||||
});
|
||||
|
||||
if (isNonNullable(challengeResult.errors)) {
|
||||
if (isDefined(challengeResult.errors)) {
|
||||
throw challengeResult.errors;
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ export const useAuth = () => {
|
||||
variables: { loginToken },
|
||||
});
|
||||
|
||||
if (isNonNullable(verifyResult.errors)) {
|
||||
if (isDefined(verifyResult.errors)) {
|
||||
throw verifyResult.errors;
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ export const useAuth = () => {
|
||||
const user = verifyResult.data?.verify.user;
|
||||
let workspaceMember = null;
|
||||
setCurrentUser(user);
|
||||
if (isNonNullable(user.workspaceMember)) {
|
||||
if (isDefined(user.workspaceMember)) {
|
||||
workspaceMember = {
|
||||
...user.workspaceMember,
|
||||
colorScheme: user.workspaceMember?.colorScheme as ColorScheme,
|
||||
@ -184,7 +184,7 @@ export const useAuth = () => {
|
||||
},
|
||||
});
|
||||
|
||||
if (isNonNullable(signUpResult.errors)) {
|
||||
if (isDefined(signUpResult.errors)) {
|
||||
throw signUpResult.errors;
|
||||
}
|
||||
|
||||
|
||||
@ -13,8 +13,8 @@ import {
|
||||
RenewTokenMutation,
|
||||
RenewTokenMutationVariables,
|
||||
} from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
const logger = loggerLink(() => 'Twenty-Refresh');
|
||||
|
||||
@ -47,7 +47,7 @@ const renewTokenMutation = async (
|
||||
fetchPolicy: 'network-only',
|
||||
});
|
||||
|
||||
if (isNonNullable(errors) || isNullable(data)) {
|
||||
if (isDefined(errors) || isUndefinedOrNull(data)) {
|
||||
throw new Error('Something went wrong during token renewal');
|
||||
}
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import { sentryConfigState } from '@/client-config/states/sentryConfigState';
|
||||
import { supportChatState } from '@/client-config/states/supportChatState';
|
||||
import { telemetryState } from '@/client-config/states/telemetryState';
|
||||
import { useGetClientConfigQuery } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const ClientConfigProvider: React.FC<React.PropsWithChildren> = ({
|
||||
children,
|
||||
@ -30,7 +30,7 @@ export const ClientConfigProvider: React.FC<React.PropsWithChildren> = ({
|
||||
const { data, loading } = useGetClientConfigQuery();
|
||||
|
||||
useEffect(() => {
|
||||
if (isNonNullable(data?.clientConfig)) {
|
||||
if (isDefined(data?.clientConfig)) {
|
||||
setAuthProviders({
|
||||
google: data?.clientConfig.authProviders.google,
|
||||
password: data?.clientConfig.authProviders.password,
|
||||
|
||||
@ -23,7 +23,7 @@ import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
|
||||
import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper';
|
||||
import { Avatar } from '@/users/components/Avatar';
|
||||
import { getLogoUrlFromDomainName } from '~/utils';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { useCommandMenu } from '../hooks/useCommandMenu';
|
||||
import { commandMenuCommandsState } from '../states/commandMenuCommandsState';
|
||||
@ -278,7 +278,7 @@ export const CommandMenu = () => {
|
||||
...otherCommands,
|
||||
].find((cmd) => cmd.id === itemId);
|
||||
|
||||
if (isNonNullable(command)) {
|
||||
if (isDefined(command)) {
|
||||
const { to, onCommandClick } = command;
|
||||
onItemClick(onCommandClick, to);
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchS
|
||||
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { COMMAND_MENU_COMMANDS } from '../constants/CommandMenuCommands';
|
||||
import { commandMenuCommandsState } from '../states/commandMenuCommandsState';
|
||||
@ -77,7 +77,7 @@ export const useCommandMenu = () => {
|
||||
(onClick?: () => void, to?: string) => {
|
||||
toggleCommandMenu();
|
||||
|
||||
if (isNonNullable(onClick)) {
|
||||
if (isDefined(onClick)) {
|
||||
onClick();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMembe
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { sentryConfigState } from '@/client-config/states/sentryConfigState';
|
||||
import { REACT_APP_SERVER_BASE_URL } from '~/config';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const SentryInitEffect = () => {
|
||||
const sentryConfig = useRecoilValue(sentryConfigState());
|
||||
@ -40,7 +40,7 @@ export const SentryInitEffect = () => {
|
||||
setIsSentryInitialized(true);
|
||||
}
|
||||
|
||||
if (isNonNullable(currentUser)) {
|
||||
if (isDefined(currentUser)) {
|
||||
Sentry.setUser({
|
||||
email: currentUser?.email,
|
||||
id: currentUser?.id,
|
||||
|
||||
@ -11,7 +11,7 @@ import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useFavorites = () => {
|
||||
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState());
|
||||
@ -56,7 +56,7 @@ export const useFavorites = () => {
|
||||
return favorites
|
||||
.map((favorite) => {
|
||||
for (const relationField of favoriteRelationFieldMetadataItems) {
|
||||
if (isNonNullable(favorite[relationField.name])) {
|
||||
if (isDefined(favorite[relationField.name])) {
|
||||
const relationObject = favorite[relationField.name];
|
||||
|
||||
const relationObjectNameSingular =
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { getLogoUrlFromDomainName } from '~/utils';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const mapFavorites = (favorites: any) => {
|
||||
return favorites
|
||||
.map((favorite: any) => {
|
||||
const recordInformation = isNonNullable(favorite?.person)
|
||||
const recordInformation = isDefined(favorite?.person)
|
||||
? {
|
||||
id: favorite.person.id,
|
||||
labelIdentifier:
|
||||
@ -15,7 +15,7 @@ export const mapFavorites = (favorites: any) => {
|
||||
avatarType: 'rounded',
|
||||
link: `/object/person/${favorite.person.id}`,
|
||||
}
|
||||
: isNonNullable(favorite?.company)
|
||||
: isDefined(favorite?.company)
|
||||
? {
|
||||
id: favorite.company.id,
|
||||
labelIdentifier: favorite.company.name,
|
||||
@ -32,6 +32,6 @@ export const mapFavorites = (favorites: any) => {
|
||||
position: favorite?.position,
|
||||
};
|
||||
})
|
||||
.filter(isNonNullable)
|
||||
.filter(isDefined)
|
||||
.sort((a: any, b: any) => a.position - b.position);
|
||||
};
|
||||
|
||||
@ -2,7 +2,7 @@ import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { objectMetadataItemsByNameSingularMapSelector } from '@/object-metadata/states/objectMetadataItemsByNameSingularMapSelector';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useFilterOutUnexistingObjectMetadataItems = () => {
|
||||
const objectMetadataItemsByNameSingularMap = useRecoilValue(
|
||||
@ -12,7 +12,7 @@ export const useFilterOutUnexistingObjectMetadataItems = () => {
|
||||
const filterOutUnexistingObjectMetadataItems = (
|
||||
objectMetadatItem: ObjectMetadataItem,
|
||||
) =>
|
||||
isNonNullable(
|
||||
isDefined(
|
||||
objectMetadataItemsByNameSingularMap.get(objectMetadatItem.nameSingular),
|
||||
);
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ import { useGenerateFindManyRecordsQuery } from '@/object-record/hooks/useGenera
|
||||
import { useGenerateFindOneRecordQuery } from '@/object-record/hooks/useGenerateFindOneRecordQuery';
|
||||
import { useGenerateUpdateOneRecordMutation } from '@/object-record/hooks/useGenerateUpdateOneRecordMutation';
|
||||
import { generateDeleteOneRecordMutation } from '@/object-record/utils/generateDeleteOneRecordMutation';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier';
|
||||
|
||||
@ -64,7 +64,7 @@ export const useObjectMetadataItem = (
|
||||
objectMetadataItems = mockObjectMetadataItems;
|
||||
}
|
||||
|
||||
if (!isNonNullable(objectMetadataItem)) {
|
||||
if (!isDefined(objectMetadataItem)) {
|
||||
throw new ObjectMetadataItemNotFoundError(
|
||||
objectNameSingular,
|
||||
objectMetadataItems,
|
||||
|
||||
@ -5,7 +5,7 @@ import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/Object
|
||||
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier';
|
||||
|
||||
@ -34,7 +34,7 @@ export const useObjectMetadataItemOnly = ({
|
||||
objectMetadataItems = mockObjectMetadataItems;
|
||||
}
|
||||
|
||||
if (!isNonNullable(objectMetadataItem)) {
|
||||
if (!isDefined(objectMetadataItem)) {
|
||||
throw new ObjectMetadataItemNotFoundError(
|
||||
objectNameSingular,
|
||||
objectMetadataItems,
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState.ts';
|
||||
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
|
||||
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useObjectNamePluralFromSingular = ({
|
||||
objectNameSingular,
|
||||
@ -28,7 +28,7 @@ export const useObjectNamePluralFromSingular = ({
|
||||
) ?? null;
|
||||
}
|
||||
|
||||
if (!isNonNullable(objectMetadataItem)) {
|
||||
if (!isDefined(objectMetadataItem)) {
|
||||
throw new Error(
|
||||
`Object metadata item not found for ${objectNameSingular} object`,
|
||||
);
|
||||
|
||||
@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState.ts';
|
||||
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
|
||||
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useObjectNameSingularFromPlural = ({
|
||||
objectNamePlural,
|
||||
@ -29,7 +29,7 @@ export const useObjectNameSingularFromPlural = ({
|
||||
) ?? null;
|
||||
}
|
||||
|
||||
if (!isNonNullable(objectMetadataItem)) {
|
||||
if (!isDefined(objectMetadataItem)) {
|
||||
throw new Error(
|
||||
`Object metadata item not found for ${objectNamePlural} object`,
|
||||
);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { ObjectMetadataItem } from '../types/ObjectMetadataItem';
|
||||
|
||||
@ -32,7 +32,7 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
|
||||
}
|
||||
|
||||
if (field.type === FieldMetadataType.Relation) {
|
||||
if (isNonNullable(field.fromRelationMetadata)) {
|
||||
if (isDefined(field.fromRelationMetadata)) {
|
||||
return acc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||
import { OrderByField } from '@/object-metadata/types/OrderByField';
|
||||
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const getObjectOrderByField = (
|
||||
objectMetadataItem: ObjectMetadataItem,
|
||||
@ -12,7 +12,7 @@ export const getObjectOrderByField = (
|
||||
const labelIdentifierFieldMetadata =
|
||||
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
|
||||
|
||||
if (isNonNullable(labelIdentifierFieldMetadata)) {
|
||||
if (isDefined(labelIdentifierFieldMetadata)) {
|
||||
switch (labelIdentifierFieldMetadata.type) {
|
||||
case FieldMetadataType.FullName:
|
||||
return {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const DEFAULT_LABEL_IDENTIFIER_FIELD_NAME = 'name';
|
||||
|
||||
@ -14,6 +14,6 @@ export const isLabelIdentifierField = ({
|
||||
'labelIdentifierFieldMetadataId'
|
||||
>;
|
||||
}) =>
|
||||
isNonNullable(objectMetadataItem.labelIdentifierFieldMetadataId)
|
||||
isDefined(objectMetadataItem.labelIdentifierFieldMetadataId)
|
||||
? fieldMetadataItem.id === objectMetadataItem.labelIdentifierFieldMetadataId
|
||||
: fieldMetadataItem.name === DEFAULT_LABEL_IDENTIFIER_FIELD_NAME;
|
||||
|
||||
@ -4,7 +4,7 @@ import {
|
||||
FieldMetadataType,
|
||||
RelationMetadataType,
|
||||
} from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const parseFieldRelationType = (
|
||||
field: FieldMetadataItem | undefined,
|
||||
@ -30,14 +30,14 @@ export const parseFieldRelationType = (
|
||||
};
|
||||
|
||||
if (
|
||||
isNonNullable(field.fromRelationMetadata) &&
|
||||
isDefined(field.fromRelationMetadata) &&
|
||||
field.fromRelationMetadata.relationType in config
|
||||
) {
|
||||
return config[field.fromRelationMetadata.relationType].from;
|
||||
}
|
||||
|
||||
if (
|
||||
isNonNullable(field.toRelationMetadata) &&
|
||||
isDefined(field.toRelationMetadata) &&
|
||||
field.toRelationMetadata.relationType in config
|
||||
) {
|
||||
return config[field.toRelationMetadata.relationType].to;
|
||||
|
||||
@ -5,7 +5,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useGetRecordFromCache = ({
|
||||
@ -21,7 +21,7 @@ export const useGetRecordFromCache = ({
|
||||
recordId: string,
|
||||
cache = apolloClient.cache,
|
||||
) => {
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import { Modifiers } from '@apollo/client/cache';
|
||||
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useModifyRecordFromCache = ({
|
||||
@ -17,7 +17,7 @@ export const useModifyRecordFromCache = ({
|
||||
recordId: string,
|
||||
fieldModifiers: Modifiers<CachedObjectRecord>,
|
||||
) => {
|
||||
if (isNullable(objectMetadataItem)) return;
|
||||
if (isUndefinedOrNull(objectMetadataItem)) return;
|
||||
|
||||
const cachedRecordId = cache.identify({
|
||||
__typename: capitalize(objectMetadataItem.nameSingular),
|
||||
|
||||
@ -6,7 +6,7 @@ import { useGenerateFindManyRecordsQuery } from '@/object-record/hooks/useGenera
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { ObjectRecordQueryResult } from '@/object-record/types/ObjectRecordQueryResult';
|
||||
import { ObjectRecordQueryVariables } from '@/object-record/types/ObjectRecordQueryVariables';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useReadFindManyRecordsQueryInCache = ({
|
||||
objectMetadataItem,
|
||||
@ -38,7 +38,7 @@ export const useReadFindManyRecordsQueryInCache = ({
|
||||
const existingRecordConnection =
|
||||
existingRecordsQueryResult?.[objectMetadataItem.namePlural];
|
||||
|
||||
const existingObjectRecords = isNonNullable(existingRecordConnection)
|
||||
const existingObjectRecords = isDefined(existingRecordConnection)
|
||||
? getRecordsFromRecordConnection({
|
||||
recordConnection: existingRecordConnection,
|
||||
})
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
import { useMapConnectionToRecords } from '@/object-record/hooks/useMapConnectionToRecords';
|
||||
import { Person } from '@/people/types/Person';
|
||||
import { getJestHookWrapper } from '~/testing/jest/getJestHookWrapper';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const Wrapper = getJestHookWrapper({
|
||||
apolloMocks: [],
|
||||
@ -184,7 +184,7 @@ describe('useMapConnectionToRecords', () => {
|
||||
expect(isNonEmptyArray(peopleResult)).toBe(true);
|
||||
expect(firstPersonResult.id).toBe(firstPersonMock.id);
|
||||
|
||||
expect(isNonNullable(firstPersonsCompanyresult)).toBe(true);
|
||||
expect(isDefined(firstPersonsCompanyresult)).toBe(true);
|
||||
expect(firstPersonsCompanyresult.id).toEqual(firstPersonsCompanyMock.id);
|
||||
});
|
||||
});
|
||||
|
||||
@ -5,7 +5,7 @@ import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMeta
|
||||
import { useAddRecordInCache } from '@/object-record/cache/hooks/useAddRecordInCache';
|
||||
import { useGenerateObjectRecordOptimisticResponse } from '@/object-record/cache/hooks/useGenerateObjectRecordOptimisticResponse';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useCreateManyRecordsInCache = <T extends ObjectRecord>({
|
||||
objectNameSingular,
|
||||
@ -35,7 +35,7 @@ export const useCreateManyRecordsInCache = <T extends ObjectRecord>({
|
||||
const generatedCachedObjectRecord =
|
||||
generateObjectRecordOptimisticResponse<T>(record);
|
||||
|
||||
if (isNonNullable(generatedCachedObjectRecord)) {
|
||||
if (isDefined(generatedCachedObjectRecord)) {
|
||||
addRecordInCache(generatedCachedObjectRecord);
|
||||
|
||||
createdRecordsInCache.push(generatedCachedObjectRecord);
|
||||
|
||||
@ -4,7 +4,7 @@ import { triggerDeleteRecordsOptimisticEffect } from '@/apollo/optimistic-effect
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { getDeleteManyRecordsMutationResponseField } from '@/object-record/hooks/useGenerateDeleteManyRecordMutation';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
type useDeleteOneRecordProps = {
|
||||
@ -56,7 +56,7 @@ export const useDeleteManyRecords = ({
|
||||
|
||||
const cachedRecords = records
|
||||
.map((record) => getRecordFromCache(record.id, cache))
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
triggerDeleteRecordsOptimisticEffect({
|
||||
cache,
|
||||
|
||||
@ -14,7 +14,7 @@ import { ObjectRecordEdge } from '@/object-record/types/ObjectRecordEdge';
|
||||
import { ObjectRecordQueryVariables } from '@/object-record/types/ObjectRecordQueryVariables';
|
||||
import { filterUniqueRecordEdgesByCursor } from '@/object-record/utils/filterUniqueRecordEdgesByCursor';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { logError } from '~/utils/logError';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
@ -85,7 +85,7 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
|
||||
|
||||
onCompleted?.(data[objectMetadataItem.namePlural], pageInfo);
|
||||
|
||||
if (isNonNullable(data?.[objectMetadataItem.namePlural])) {
|
||||
if (isDefined(data?.[objectMetadataItem.namePlural])) {
|
||||
setLastCursor(pageInfo.endCursor ?? '');
|
||||
setHasNextPage(pageInfo.hasNextPage ?? false);
|
||||
}
|
||||
@ -132,7 +132,7 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
|
||||
|
||||
const pageInfo =
|
||||
fetchMoreResult?.[objectMetadataItem.namePlural]?.pageInfo;
|
||||
if (isNonNullable(data?.[objectMetadataItem.namePlural])) {
|
||||
if (isDefined(data?.[objectMetadataItem.namePlural])) {
|
||||
setLastCursor(pageInfo.endCursor ?? '');
|
||||
setHasNextPage(pageInfo.hasNextPage ?? false);
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getCreateManyRecordsMutationResponseField = (
|
||||
@ -19,7 +19,7 @@ export const useGenerateCreateManyRecordMutation = ({
|
||||
}) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
|
||||
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getCreateOneRecordMutationResponseField = (
|
||||
@ -19,7 +19,7 @@ export const useGenerateCreateOneRecordMutation = ({
|
||||
}) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
|
||||
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import { gql } from '@apollo/client';
|
||||
|
||||
import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getDeleteManyRecordsMutationResponseField = (
|
||||
@ -14,7 +14,7 @@ export const useGenerateDeleteManyRecordMutation = ({
|
||||
}: {
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
}) => {
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getExecuteQuickActionOnOneRecordMutationGraphQLField = ({
|
||||
@ -23,7 +23,7 @@ export const useGenerateExecuteQuickActionOnOneRecordMutation = ({
|
||||
}) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
|
||||
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getUpdateOneRecordMutationResponseField = (
|
||||
@ -19,7 +19,7 @@ export const useGenerateUpdateOneRecordMutation = ({
|
||||
}) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
|
||||
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import { parseFieldRelationType } from '@/object-metadata/utils/parseFieldRelati
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { ObjectRecordConnection } from '@/object-record/types/ObjectRecordConnection';
|
||||
import { FieldMetadataType } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useMapConnectionToRecords = () => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState());
|
||||
@ -26,7 +26,7 @@ export const useMapConnectionToRecords = () => {
|
||||
depth: number;
|
||||
}): ObjectRecord[] => {
|
||||
if (
|
||||
!isNonNullable(objectRecordConnection) ||
|
||||
!isDefined(objectRecordConnection) ||
|
||||
!isNonEmptyArray(objectMetadataItems)
|
||||
) {
|
||||
return [];
|
||||
@ -79,7 +79,7 @@ export const useMapConnectionToRecords = () => {
|
||||
|
||||
if (
|
||||
!relationFieldMetadataItem ||
|
||||
!isNonNullable(relatedObjectMetadataSingularName)
|
||||
!isDefined(relatedObjectMetadataSingularName)
|
||||
) {
|
||||
throw new Error(
|
||||
`Could not find relation object metadata item for object name plural ${relationField.name} in mapConnectionToRecords`,
|
||||
@ -90,7 +90,7 @@ export const useMapConnectionToRecords = () => {
|
||||
relationField.name
|
||||
] as ObjectRecordConnection | undefined | null;
|
||||
|
||||
if (!isNonNullable(relationConnection)) {
|
||||
if (!isDefined(relationConnection)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { useFilterDropdown } from '@/object-record/object-filter-dropdown/hooks/useFilterDropdown';
|
||||
import { InternalDatePicker } from '@/ui/input/components/internal/date/components/InternalDatePicker';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const ObjectFilterDropdownDateInput = () => {
|
||||
const {
|
||||
@ -15,9 +15,9 @@ export const ObjectFilterDropdownDateInput = () => {
|
||||
|
||||
selectFilter?.({
|
||||
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||
value: isNonNullable(date) ? date.toISOString() : '',
|
||||
value: isDefined(date) ? date.toISOString() : '',
|
||||
operand: selectedOperandInDropdown,
|
||||
displayValue: isNonNullable(date) ? date.toLocaleString() : '',
|
||||
displayValue: isDefined(date) ? date.toLocaleString() : '',
|
||||
definition: filterDefinitionUsedInDropdown,
|
||||
});
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import { useFilterDropdown } from '@/object-record/object-filter-dropdown/hooks/
|
||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
|
||||
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { getOperandLabel } from '../utils/getOperandLabel';
|
||||
import { getOperandsForFilterType } from '../utils/getOperandsForFilterType';
|
||||
@ -26,8 +26,8 @@ export const ObjectFilterDropdownOperandSelect = () => {
|
||||
setIsObjectFilterDropdownOperandSelectUnfolded(false);
|
||||
|
||||
if (
|
||||
isNonNullable(filterDefinitionUsedInDropdown) &&
|
||||
isNonNullable(selectedFilter)
|
||||
isDefined(filterDefinitionUsedInDropdown) &&
|
||||
isDefined(selectedFilter)
|
||||
) {
|
||||
selectFilter?.({
|
||||
fieldMetadataId: selectedFilter.fieldMetadataId,
|
||||
|
||||
@ -5,7 +5,7 @@ import { FieldMetadataItemOption } from '@/object-metadata/types/FieldMetadataIt
|
||||
import { useFilterDropdown } from '@/object-record/object-filter-dropdown/hooks/useFilterDropdown';
|
||||
import { useOptionsForSelect } from '@/object-record/object-filter-dropdown/hooks/useOptionsForSelect';
|
||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const EMPTY_FILTER_VALUE = '';
|
||||
export const MAX_OPTIONS_TO_DISPLAY = 3;
|
||||
@ -32,7 +32,7 @@ export const ObjectFilterDropdownOptionSelect = () => {
|
||||
>([]);
|
||||
|
||||
useEffect(() => {
|
||||
if (isNonNullable(selectOptions)) {
|
||||
if (isDefined(selectOptions)) {
|
||||
const options = selectOptions.map((option) => {
|
||||
const isSelected =
|
||||
objectFilterDropdownSelectedOptionValues?.includes(option.value) ??
|
||||
@ -72,8 +72,8 @@ export const ObjectFilterDropdownOptionSelect = () => {
|
||||
: selectedOptions.map((option) => option.label).join(', ');
|
||||
|
||||
if (
|
||||
isNonNullable(filterDefinitionUsedInDropdown) &&
|
||||
isNonNullable(selectedOperandInDropdown)
|
||||
isDefined(filterDefinitionUsedInDropdown) &&
|
||||
isDefined(selectedOperandInDropdown)
|
||||
) {
|
||||
const newFilterValue =
|
||||
selectedOptions.length > 0
|
||||
|
||||
@ -2,7 +2,7 @@ import { useFilterDropdown } from '@/object-record/object-filter-dropdown/hooks/
|
||||
import { MultipleRecordSelectDropdown } from '@/object-record/select/components/MultipleRecordSelectDropdown';
|
||||
import { useRecordsForSelect } from '@/object-record/select/hooks/useRecordsForSelect';
|
||||
import { SelectableRecord } from '@/object-record/select/types/SelectableRecord';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const EMPTY_FILTER_VALUE = '[]';
|
||||
export const MAX_RECORDS_TO_DISPLAY = 3;
|
||||
@ -68,8 +68,8 @@ export const ObjectFilterDropdownRecordSelect = () => {
|
||||
: selectedRecordNames.join(', ');
|
||||
|
||||
if (
|
||||
isNonNullable(filterDefinitionUsedInDropdown) &&
|
||||
isNonNullable(selectedOperandInDropdown)
|
||||
isDefined(filterDefinitionUsedInDropdown) &&
|
||||
isDefined(selectedOperandInDropdown)
|
||||
) {
|
||||
const newFilterValue =
|
||||
newSelectedRecordIds.length > 0
|
||||
|
||||
@ -2,7 +2,7 @@ import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||
import { OrderByField } from '@/object-metadata/types/OrderByField';
|
||||
import { Field } from '~/generated/graphql';
|
||||
import { mapArrayToObject } from '~/utils/array/mapArrayToObject';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
import { Sort } from '../types/Sort';
|
||||
|
||||
@ -15,7 +15,7 @@ export const turnSortsIntoOrderBy = (
|
||||
sorts.map((sort) => {
|
||||
const correspondingField = fieldsById[sort.fieldMetadataId];
|
||||
|
||||
if (isNullable(correspondingField)) {
|
||||
if (isUndefinedOrNull(correspondingField)) {
|
||||
throw new Error(
|
||||
`Could not find field ${sort.fieldMetadataId} in metadata object`,
|
||||
);
|
||||
|
||||
@ -19,7 +19,7 @@ import { actionBarEntriesState } from '@/ui/navigation/action-bar/states/actionB
|
||||
import { contextMenuEntriesState } from '@/ui/navigation/context-menu/states/contextMenuEntriesState';
|
||||
import { ContextMenuEntry } from '@/ui/navigation/context-menu/types/ContextMenuEntry';
|
||||
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
type useRecordActionBarProps = {
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
@ -63,7 +63,7 @@ export const useRecordActionBar = ({
|
||||
|
||||
if (isFavorite) {
|
||||
deleteFavorite(foundFavorite.id);
|
||||
} else if (isNonNullable(selectedRecord)) {
|
||||
} else if (isDefined(selectedRecord)) {
|
||||
createFavorite(selectedRecord, objectMetadataItem.nameSingular);
|
||||
}
|
||||
callback?.();
|
||||
|
||||
@ -7,7 +7,7 @@ import { recordBoardColumnsComponentFamilyState } from '@/object-record/record-b
|
||||
import { RecordBoardColumnDefinition } from '@/object-record/record-board/types/RecordBoardColumnDefinition';
|
||||
import { guardRecoilDefaultValue } from '@/ui/utilities/recoil-scope/utils/guardRecoilDefaultValue';
|
||||
import { createComponentFamilySelector } from '@/ui/utilities/state/component-state/utils/createComponentFamilySelector';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const recordBoardColumnsComponentFamilySelector =
|
||||
createComponentFamilySelector<
|
||||
@ -61,7 +61,7 @@ export const recordBoardColumnsComponentFamilySelector =
|
||||
}),
|
||||
);
|
||||
})
|
||||
.filter(isNonNullable);
|
||||
.filter(isDefined);
|
||||
|
||||
const lastColumn = [...columns].sort(
|
||||
(a, b) => b.position - a.position,
|
||||
|
||||
@ -3,7 +3,7 @@ import { useContext } from 'react';
|
||||
import { isFieldRelation } from '@/object-record/record-field/types/guards/isFieldRelation';
|
||||
import { IconPencil } from '@/ui/display/icon';
|
||||
import { IconComponent } from '@/ui/display/icon/types/IconComponent';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
import { FieldContext } from '../contexts/FieldContext';
|
||||
import { isFieldEmail } from '../types/guards/isFieldEmail';
|
||||
@ -13,7 +13,7 @@ import { isFieldPhone } from '../types/guards/isFieldPhone';
|
||||
export const useGetButtonIcon = (): IconComponent | undefined => {
|
||||
const { fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
if (isNullable(fieldDefinition)) return undefined;
|
||||
if (isUndefinedOrNull(fieldDefinition)) return undefined;
|
||||
|
||||
if (
|
||||
isFieldLink(fieldDefinition) ||
|
||||
|
||||
@ -9,7 +9,7 @@ import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/Dropdow
|
||||
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
|
||||
import { MenuItemSelectTag } from '@/ui/navigation/menu-item/components/MenuItemSelectTag';
|
||||
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const StyledRelationPickerContainer = styled.div`
|
||||
left: -1px;
|
||||
@ -53,7 +53,7 @@ export const SelectFieldInput = ({
|
||||
event.target instanceof HTMLInputElement &&
|
||||
event.target.tagName === 'INPUT'
|
||||
);
|
||||
if (weAreNotInAnHTMLInput && isNonNullable(onCancel)) {
|
||||
if (weAreNotInAnHTMLInput && isDefined(onCancel)) {
|
||||
onCancel();
|
||||
}
|
||||
},
|
||||
|
||||
@ -4,7 +4,7 @@ import { expect, fn, userEvent, waitFor, within } from '@storybook/test';
|
||||
|
||||
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { FieldRatingValue } from '../../../../types/FieldMetadata';
|
||||
import { FieldContextProvider } from '../../../__stories__/FieldContextProvider';
|
||||
@ -101,7 +101,7 @@ export const Submit: Story = {
|
||||
const firstStar = input.firstElementChild;
|
||||
|
||||
await waitFor(() => {
|
||||
if (isNonNullable(firstStar)) {
|
||||
if (isDefined(firstStar)) {
|
||||
userEvent.click(firstStar);
|
||||
expect(submitJestFn).toHaveBeenCalledTimes(1);
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ import { Key } from 'ts-key-enum';
|
||||
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useRegisterInputEvents = <T>({
|
||||
inputRef,
|
||||
@ -30,7 +30,7 @@ export const useRegisterInputEvents = <T>({
|
||||
|
||||
onClickOutside?.(event, inputValue);
|
||||
},
|
||||
enabled: isNonNullable(onClickOutside),
|
||||
enabled: isDefined(onClickOutside),
|
||||
});
|
||||
|
||||
useScopedHotkeys(
|
||||
|
||||
@ -17,9 +17,9 @@ import { isFieldSelect } from '@/object-record/record-field/types/guards/isField
|
||||
import { isFieldSelectValue } from '@/object-record/record-field/types/guards/isFieldSelectValue';
|
||||
import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText';
|
||||
import { isFieldUuid } from '@/object-record/record-field/types/guards/isFieldUuid';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const isValueEmpty = (value: unknown) => !isNonNullable(value) || value === '';
|
||||
const isValueEmpty = (value: unknown) => !isDefined(value) || value === '';
|
||||
|
||||
export const isFieldValueEmpty = ({
|
||||
fieldDefinition,
|
||||
@ -46,7 +46,7 @@ export const isFieldValueEmpty = ({
|
||||
}
|
||||
|
||||
if (isFieldSelect(fieldDefinition)) {
|
||||
return isFieldSelectValue(fieldValue) && !isNonNullable(fieldValue);
|
||||
return isFieldSelectValue(fieldValue) && !isDefined(fieldValue);
|
||||
}
|
||||
|
||||
if (isFieldCurrency(fieldDefinition)) {
|
||||
|
||||
@ -22,8 +22,8 @@ import { isMatchingFloatFilter } from '@/object-record/record-filter/utils/isMat
|
||||
import { isMatchingStringFilter } from '@/object-record/record-filter/utils/isMatchingStringFilter';
|
||||
import { isMatchingUUIDFilter } from '@/object-record/record-filter/utils/isMatchingUUIDFilter';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isEmptyObject } from '~/utils/isEmptyObject';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
|
||||
const isAndFilter = (
|
||||
filter: ObjectRecordQueryFilter,
|
||||
@ -102,7 +102,7 @@ export const isRecordMatchingFilter = ({
|
||||
if (isNotFilter(filter)) {
|
||||
const filterValue = filter.not;
|
||||
|
||||
if (!isNonNullable(filterValue)) {
|
||||
if (!isDefined(filterValue)) {
|
||||
throw new Error('Unexpected value for "not" filter : ' + filterValue);
|
||||
}
|
||||
|
||||
@ -117,7 +117,7 @@ export const isRecordMatchingFilter = ({
|
||||
}
|
||||
|
||||
return Object.entries(filter).every(([filterKey, filterValue]) => {
|
||||
if (!isNonNullable(filterValue)) {
|
||||
if (!isDefined(filterValue)) {
|
||||
throw new Error(
|
||||
'Unexpected value for filter key "' + filterKey + '" : ' + filterValue,
|
||||
);
|
||||
@ -129,7 +129,7 @@ export const isRecordMatchingFilter = ({
|
||||
(field) => field.name === filterKey,
|
||||
);
|
||||
|
||||
if (!isNonNullable(objectMetadataField)) {
|
||||
if (!isDefined(objectMetadataField)) {
|
||||
throw new Error(
|
||||
'Field metadata item "' +
|
||||
filterKey +
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables';
|
||||
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
||||
import { Field } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { Filter } from '../../object-filter-dropdown/types/Filter';
|
||||
|
||||
@ -40,7 +40,7 @@ export const turnObjectDropdownFilterIntoQueryFilter = (
|
||||
);
|
||||
}
|
||||
|
||||
if (!isNonNullable(rawUIFilter.value) || rawUIFilter.value === '') {
|
||||
if (!isDefined(rawUIFilter.value) || rawUIFilter.value === '') {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/u
|
||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
|
||||
import { useViewBar } from '@/views/hooks/useViewBar';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
type RecordIndexViewBarEffectProps = {
|
||||
objectNamePlural: string;
|
||||
@ -34,7 +34,7 @@ export const RecordIndexViewBarEffect = ({
|
||||
} = useViewBar({ viewBarId });
|
||||
|
||||
useEffect(() => {
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return;
|
||||
}
|
||||
setViewObjectMetadataId?.(objectMetadataItem.id);
|
||||
|
||||
@ -6,7 +6,7 @@ import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
||||
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
|
||||
import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { useFindManyParams } from '../../hooks/useLoadRecordIndexTable';
|
||||
|
||||
@ -53,7 +53,7 @@ export const generateCsv: GenerateExport = ({
|
||||
return hasSubFields;
|
||||
});
|
||||
|
||||
if (isNonNullable(fieldsWithSubFields)) {
|
||||
if (isDefined(fieldsWithSubFields)) {
|
||||
const nestedFieldsWithoutTypename = Object.keys(
|
||||
(fieldsWithSubFields as any)[column.field],
|
||||
)
|
||||
|
||||
@ -5,7 +5,7 @@ import { FieldContext } from '@/object-record/record-field/contexts/FieldContext
|
||||
import { useRecordFieldInput } from '@/object-record/record-field/hooks/useRecordFieldInput';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { isInlineCellInEditModeScopedState } from '../states/isInlineCellInEditModeScopedState';
|
||||
import { InlineCellHotkeyScope } from '../types/InlineCellHotkeyScope';
|
||||
@ -40,7 +40,7 @@ export const useInlineCell = () => {
|
||||
setIsInlineCellInEditMode(true);
|
||||
initFieldInputDraftValue();
|
||||
|
||||
if (isNonNullable(customEditHotkeyScopeForField)) {
|
||||
if (isDefined(customEditHotkeyScopeForField)) {
|
||||
setHotkeyScopeAndMemorizePreviousScope(
|
||||
customEditHotkeyScopeForField.scope,
|
||||
customEditHotkeyScopeForField.customScopes,
|
||||
|
||||
@ -30,8 +30,8 @@ import {
|
||||
FileFolder,
|
||||
useUploadImageMutation,
|
||||
} from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
type RecordShowContainerProps = {
|
||||
objectNameSingular: string;
|
||||
@ -93,7 +93,7 @@ export const RecordShowContainer = ({
|
||||
if (!avatarUrl) {
|
||||
return;
|
||||
}
|
||||
if (isNullable(updateOneRecord)) {
|
||||
if (isUndefinedOrNull(updateOneRecord)) {
|
||||
return;
|
||||
}
|
||||
if (!recordFromStore) {
|
||||
@ -132,7 +132,7 @@ export const RecordShowContainer = ({
|
||||
<RecoilScope CustomRecoilScopeContext={ShowPageRecoilScopeContext}>
|
||||
<ShowPageContainer>
|
||||
<ShowPageLeftContainer>
|
||||
{!recordLoading && isNonNullable(recordFromStore) && (
|
||||
{!recordLoading && isDefined(recordFromStore) && (
|
||||
<>
|
||||
<ShowPageSummaryCard
|
||||
id={objectRecordId}
|
||||
|
||||
@ -6,7 +6,7 @@ import { Activity } from '@/activities/types/Activity';
|
||||
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
|
||||
import { recordLoadingFamilyState } from '@/object-record/record-store/states/recordLoadingFamilyState';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const RecordShowContainer = ({
|
||||
objectRecordId,
|
||||
@ -38,7 +38,7 @@ export const RecordShowContainer = ({
|
||||
const { makeActivityWithoutConnection } = useActivityConnectionUtils();
|
||||
|
||||
useEffect(() => {
|
||||
if (!loading && isNonNullable(record)) {
|
||||
if (!loading && isDefined(record)) {
|
||||
const { activity: activityWithoutConnection } =
|
||||
makeActivityWithoutConnection(record as any);
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ import { TableHotkeyScope } from '@/object-record/record-table/types/TableHotkey
|
||||
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
|
||||
import { contextMenuIsOpenState } from '@/ui/navigation/context-menu/states/contextMenuIsOpenState';
|
||||
import { contextMenuPositionState } from '@/ui/navigation/context-menu/states/contextMenuPositionState';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
const StyledContainer = styled.td<{ isSelected: boolean }>`
|
||||
background: ${({ isSelected, theme }) =>
|
||||
@ -46,7 +46,7 @@ export const RecordTableCellContainer = () => {
|
||||
|
||||
const updateRecord = useContext(RecordUpdateContext);
|
||||
|
||||
if (isNullable(columnDefinition)) {
|
||||
if (isUndefinedOrNull(columnDefinition)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ import { useLeaveTableFocus } from '@/object-record/record-table/hooks/internal/
|
||||
import { useDragSelect } from '@/ui/utilities/drag-select/hooks/useDragSelect';
|
||||
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
||||
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { CellHotkeyScopeContext } from '../../contexts/CellHotkeyScopeContext';
|
||||
import { TableHotkeyScope } from '../../types/TableHotkeyScope';
|
||||
@ -57,7 +57,7 @@ export const useOpenRecordTableCell = () => {
|
||||
|
||||
initFieldInputDraftValue(options?.initialValue);
|
||||
|
||||
if (isNonNullable(customCellHotkeyScope)) {
|
||||
if (isDefined(customCellHotkeyScope)) {
|
||||
setHotkeyScope(
|
||||
customCellHotkeyScope.scope,
|
||||
customCellHotkeyScope.customScopes,
|
||||
|
||||
@ -19,7 +19,7 @@ import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownM
|
||||
import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem';
|
||||
import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList';
|
||||
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const StyledSelectableItem = styled(SelectableItem)`
|
||||
height: 100%;
|
||||
@ -153,7 +153,7 @@ export const MultipleObjectRecordSelect = ({
|
||||
(entity) => entity.record.id === recordId,
|
||||
);
|
||||
|
||||
if (isNonNullable(correspondingRecordForSelect)) {
|
||||
if (isDefined(correspondingRecordForSelect)) {
|
||||
handleSelectChange(
|
||||
correspondingRecordForSelect,
|
||||
!recordIsSelected,
|
||||
|
||||
@ -6,7 +6,7 @@ import {
|
||||
} from '@/object-record/relation-picker/components/SingleEntitySelectMenuItemsWithSearch';
|
||||
import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu';
|
||||
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export type SingleEntitySelectProps = {
|
||||
disableBackgroundBlur?: boolean;
|
||||
@ -38,7 +38,7 @@ export const SingleEntitySelect = ({
|
||||
event.target instanceof HTMLInputElement &&
|
||||
event.target.tagName === 'INPUT'
|
||||
);
|
||||
if (weAreNotInAnHTMLInput && isNonNullable(onCancel)) {
|
||||
if (weAreNotInAnHTMLInput && isDefined(onCancel)) {
|
||||
onCancel();
|
||||
}
|
||||
},
|
||||
|
||||
@ -13,7 +13,7 @@ import { SelectableList } from '@/ui/layout/selectable-list/components/Selectabl
|
||||
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
|
||||
import { MenuItemSelect } from '@/ui/navigation/menu-item/components/MenuItemSelect';
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { EntityForSelect } from '../types/EntityForSelect';
|
||||
import { RelationPickerHotkeyScope } from '../types/RelationPickerHotkeyScope';
|
||||
@ -55,7 +55,7 @@ export const SingleEntitySelectMenuItems = ({
|
||||
|
||||
const entitiesInDropdown = [selectedEntity, ...entitiesToSelect].filter(
|
||||
(entity): entity is EntityForSelect =>
|
||||
isNonNullable(entity) && isNonEmptyString(entity.name),
|
||||
isDefined(entity) && isNonEmptyString(entity.name),
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
|
||||
@ -6,7 +6,7 @@ import {
|
||||
import { useFilteredSearchEntityQuery } from '@/search/hooks/useFilteredSearchEntityQuery';
|
||||
import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput';
|
||||
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { useEntitySelectSearch } from '../hooks/useEntitySelectSearch';
|
||||
|
||||
@ -42,7 +42,7 @@ export const SingleEntitySelectMenuItemsWithSearch = ({
|
||||
relationPickerScopeId,
|
||||
});
|
||||
|
||||
const showCreateButton = isNonNullable(onCreate) && searchFilter !== '';
|
||||
const showCreateButton = isDefined(onCreate) && searchFilter !== '';
|
||||
|
||||
const entities = useFilteredSearchEntityQuery({
|
||||
filters: [
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { DEFAULT_SEARCH_REQUEST_LIMIT } from '@/object-record/constants/DefaultSearchRequestLimit';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useLimitPerMetadataItem = ({
|
||||
@ -15,7 +15,7 @@ export const useLimitPerMetadataItem = ({
|
||||
.map(({ nameSingular }) => {
|
||||
return [`limit${capitalize(nameSingular)}`, limit];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@ -5,7 +5,7 @@ import { objectMetadataItemsByNamePluralMapSelector } from '@/object-metadata/st
|
||||
import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectRecordIdentifier';
|
||||
import { ObjectRecordForSelect } from '@/object-record/relation-picker/hooks/useMultiObjectSearch';
|
||||
import { ObjectRecordConnection } from '@/object-record/types/ObjectRecordConnection';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export type MultiObjectRecordQueryResult = {
|
||||
[namePlural: string]: ObjectRecordConnection;
|
||||
@ -30,7 +30,7 @@ export const useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArr
|
||||
const objectMetadataItem =
|
||||
objectMetadataItemsByNamePluralMap.get(namePlural);
|
||||
|
||||
if (!isNonNullable(objectMetadataItem)) return [];
|
||||
if (!isDefined(objectMetadataItem)) return [];
|
||||
|
||||
return objectRecordConnection.edges.map(({ node }) => ({
|
||||
objectMetadataItem,
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
import { SelectedObjectRecordId } from '@/object-record/relation-picker/hooks/useMultiObjectSearch';
|
||||
import { useOrderByFieldPerMetadataItem } from '@/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem';
|
||||
import { useSearchFilterPerMetadataItem } from '@/object-record/relation-picker/hooks/useSearchFilterPerMetadataItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useMultiObjectSearchMatchesSearchFilterAndSelectedItemsQuery = ({
|
||||
@ -71,7 +71,7 @@ export const useMultiObjectSearchMatchesSearchFilterAndSelectedItemsQuery = ({
|
||||
},
|
||||
];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
const { orderByFieldPerMetadataItem } = useOrderByFieldPerMetadataItem({
|
||||
@ -100,7 +100,7 @@ export const useMultiObjectSearchMatchesSearchFilterAndSelectedItemsQuery = ({
|
||||
...orderByFieldPerMetadataItem,
|
||||
...limitPerMetadataItem,
|
||||
},
|
||||
skip: !isNonNullable(multiSelectQueryForSelectedIds),
|
||||
skip: !isDefined(multiSelectQueryForSelectedIds),
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ import { SelectedObjectRecordId } from '@/object-record/relation-picker/hooks/us
|
||||
import { useOrderByFieldPerMetadataItem } from '@/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem';
|
||||
import { useSearchFilterPerMetadataItem } from '@/object-record/relation-picker/hooks/useSearchFilterPerMetadataItem';
|
||||
import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useMultiObjectSearchMatchesSearchFilterAndToSelectQuery = ({
|
||||
@ -72,7 +72,7 @@ export const useMultiObjectSearchMatchesSearchFilterAndToSelectQuery = ({
|
||||
makeAndFilterVariables(searchFilters),
|
||||
];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
const { orderByFieldPerMetadataItem } = useOrderByFieldPerMetadataItem({
|
||||
@ -99,7 +99,7 @@ export const useMultiObjectSearchMatchesSearchFilterAndToSelectQuery = ({
|
||||
...orderByFieldPerMetadataItem,
|
||||
...limitPerMetadataItem,
|
||||
},
|
||||
skip: !isNonNullable(multiSelectQuery),
|
||||
skip: !isDefined(multiSelectQuery),
|
||||
});
|
||||
|
||||
const {
|
||||
|
||||
@ -12,7 +12,7 @@ import {
|
||||
} from '@/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray';
|
||||
import { SelectedObjectRecordId } from '@/object-record/relation-picker/hooks/useMultiObjectSearch';
|
||||
import { useOrderByFieldPerMetadataItem } from '@/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const EMPTY_QUERY = gql`
|
||||
@ -56,7 +56,7 @@ export const useMultiObjectSearchSelectedItemsQuery = ({
|
||||
},
|
||||
];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
const { orderByFieldPerMetadataItem } = useOrderByFieldPerMetadataItem({
|
||||
@ -83,7 +83,7 @@ export const useMultiObjectSearchSelectedItemsQuery = ({
|
||||
...orderByFieldPerMetadataItem,
|
||||
...limitPerMetadataItem,
|
||||
},
|
||||
skip: !isNonNullable(multiSelectQueryForSelectedIds),
|
||||
skip: !isDefined(multiSelectQueryForSelectedIds),
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { getObjectOrderByField } from '@/object-metadata/utils/getObjectOrderByField';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const useOrderByFieldPerMetadataItem = ({
|
||||
@ -20,7 +20,7 @@ export const useOrderByFieldPerMetadataItem = ({
|
||||
},
|
||||
];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@ -5,7 +5,7 @@ import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/get
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables';
|
||||
import { FieldMetadataType } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useSearchFilterPerMetadataItem = ({
|
||||
objectMetadataItems,
|
||||
@ -25,7 +25,7 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
|
||||
let searchFilter: ObjectRecordQueryFilter = {};
|
||||
|
||||
if (isNonNullable(labelIdentifierFieldMetadataItem)) {
|
||||
if (isDefined(labelIdentifierFieldMetadataItem)) {
|
||||
switch (labelIdentifierFieldMetadataItem.type) {
|
||||
case FieldMetadataType.FullName: {
|
||||
if (isNonEmptyString(searchFilterValue)) {
|
||||
@ -46,7 +46,7 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
},
|
||||
]);
|
||||
|
||||
if (isNonNullable(fullNameFilter)) {
|
||||
if (isDefined(fullNameFilter)) {
|
||||
searchFilter = fullNameFilter;
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
|
||||
return [objectMetadataItem.nameSingular, searchFilter] as const;
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@ -9,7 +9,7 @@ import { useIcons } from '@/ui/display/icon/hooks/useIcons';
|
||||
import { IconComponent } from '@/ui/display/icon/types/IconComponent';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const firstName = 'Firstname';
|
||||
const lastName = 'Lastname';
|
||||
@ -132,7 +132,7 @@ export const useSpreadsheetRecordImport = (objectNameSingular: string) => {
|
||||
break;
|
||||
case FieldMetadataType.Relation:
|
||||
if (
|
||||
isNonNullable(value) &&
|
||||
isDefined(value) &&
|
||||
(isNonEmptyString(value) || value !== false)
|
||||
) {
|
||||
fieldMapping[field.name + 'Id'] = value;
|
||||
@ -140,7 +140,7 @@ export const useSpreadsheetRecordImport = (objectNameSingular: string) => {
|
||||
break;
|
||||
case FieldMetadataType.FullName:
|
||||
if (
|
||||
isNonNullable(
|
||||
isDefined(
|
||||
record[`${firstName} (${field.name})`] ||
|
||||
record[`${lastName} (${field.name})`],
|
||||
)
|
||||
|
||||
@ -2,7 +2,7 @@ import { gql } from '@apollo/client';
|
||||
|
||||
import { EMPTY_MUTATION } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isNullable } from '~/utils/isNullable';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
import { capitalize } from '~/utils/string/capitalize';
|
||||
|
||||
export const getDeleteOneRecordMutationResponseField = (
|
||||
@ -14,7 +14,7 @@ export const generateDeleteOneRecordMutation = ({
|
||||
}: {
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
}) => {
|
||||
if (isNullable(objectMetadataItem)) {
|
||||
if (isUndefinedOrNull(objectMetadataItem)) {
|
||||
return EMPTY_MUTATION;
|
||||
}
|
||||
|
||||
|
||||
@ -1,15 +1,12 @@
|
||||
import { ObjectRecordEdge } from '@/object-record/types/ObjectRecordEdge';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const getChildRelationArray = ({
|
||||
childRelation,
|
||||
}: {
|
||||
childRelation: any;
|
||||
}) => {
|
||||
if (
|
||||
isNonNullable(childRelation.edges) &&
|
||||
Array.isArray(childRelation.edges)
|
||||
) {
|
||||
if (isDefined(childRelation.edges) && Array.isArray(childRelation.edges)) {
|
||||
return childRelation.edges.map((edge: ObjectRecordEdge) => edge.node);
|
||||
} else {
|
||||
return childRelation;
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const makeAndFilterVariables = (
|
||||
filters: (ObjectRecordQueryFilter | undefined)[],
|
||||
): ObjectRecordQueryFilter | undefined => {
|
||||
const definedFilters = filters.filter(isNonNullable);
|
||||
const definedFilters = filters.filter(isDefined);
|
||||
|
||||
if (!definedFilters.length) return undefined;
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const makeOrFilterVariables = (
|
||||
filters: (ObjectRecordQueryFilter | undefined)[],
|
||||
): ObjectRecordQueryFilter | undefined => {
|
||||
const definedFilters = filters.filter(isNonNullable);
|
||||
const definedFilters = filters.filter(isDefined);
|
||||
|
||||
if (!definedFilters.length) return undefined;
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { isFieldRelationValue } from '@/object-record/record-field/types/guards/isFieldRelationValue';
|
||||
import { sanitizeLink } from '@/object-record/utils/sanitizeLinkRecordInput';
|
||||
import { FieldMetadataType } from '~/generated/graphql';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const sanitizeRecordInput = ({
|
||||
objectMetadataItem,
|
||||
@ -39,7 +39,7 @@ export const sanitizeRecordInput = ({
|
||||
|
||||
return [fieldName, fieldValue];
|
||||
})
|
||||
.filter(isNonNullable),
|
||||
.filter(isDefined),
|
||||
);
|
||||
if (
|
||||
objectMetadataItem.nameSingular !== CoreObjectNameSingular.Company ||
|
||||
|
||||
@ -2,7 +2,7 @@ import { DateTime } from 'luxon';
|
||||
|
||||
import { OrderBy } from '@/object-metadata/types/OrderBy';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { isNonNullable } from '~/utils/isNonNullable';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
const SORT_BEFORE = -1;
|
||||
const SORT_AFTER = 1;
|
||||
@ -14,11 +14,11 @@ export const sortObjectRecordByDateField =
|
||||
const aDate = a[dateField];
|
||||
const bDate = b[dateField];
|
||||
|
||||
if (!isNonNullable(aDate) && !isNonNullable(bDate)) {
|
||||
if (!isDefined(aDate) && !isDefined(bDate)) {
|
||||
return SORT_EQUAL;
|
||||
}
|
||||
|
||||
if (!isNonNullable(aDate)) {
|
||||
if (!isDefined(aDate)) {
|
||||
if (sortDirection === 'AscNullsFirst') {
|
||||
return SORT_BEFORE;
|
||||
} else if (sortDirection === 'DescNullsFirst') {
|
||||
@ -32,7 +32,7 @@ export const sortObjectRecordByDateField =
|
||||
throw new Error(`Invalid sortDirection: ${sortDirection}`);
|
||||
}
|
||||
|
||||
if (!isNonNullable(bDate)) {
|
||||
if (!isDefined(bDate)) {
|
||||
if (sortDirection === 'AscNullsFirst') {
|
||||
return SORT_AFTER;
|
||||
} else if (sortDirection === 'DescNullsFirst') {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user