@livelike/react-native
Version:
LiveLike React Native package
43 lines (36 loc) • 1.52 kB
text/typescript
import { useMemo } from 'react';
import { SINGLE_INTERACTION_WIDGET_KINDS } from '@livelike/javascript';
import { widgetStore } from '../store';
import { WidgetUIPhase } from '../types';
import { useSelectedFieldStore } from './useSelectedFieldStore';
import { useWidgetUIPhase } from './useWidgetUIPhase';
export type UseIsWidgetDisabledArg = {
widgetId: string;
};
export const useIsWidgetDisabled = ({ widgetId }: UseIsWidgetDisabledArg) => {
const widgetUIPhase = useWidgetUIPhase({ widgetId });
const widgetKind = useSelectedFieldStore(
widgetStore,
() => widgetStore.get()[widgetId]?.widgetPayload?.kind
);
return useMemo(() => {
// disable widget if widget interaction is exprired or is in submitting phase
const isSubmitting = widgetUIPhase === WidgetUIPhase.SUBMITTING;
const isExpired = widgetUIPhase === WidgetUIPhase.EXPIRED;
const isFollowUpPublished =
widgetUIPhase === WidgetUIPhase.FOLLOW_UP_PUBLISHED;
if (isSubmitting || isExpired || isFollowUpPublished) {
return true;
}
// disable widget if widget interaction is already submitted for one time interactable widgets
const isSubmitted = widgetUIPhase === WidgetUIPhase.SUBMITTED;
if (isSubmitted && SINGLE_INTERACTION_WIDGET_KINDS.includes(widgetKind)) {
return true;
}
// disable widget if widget interactivity is timed out
if (widgetUIPhase === WidgetUIPhase.INTERACTIVE_TIMED_OUT) {
return true;
}
return false;
}, [widgetUIPhase, widgetKind]);
};