personal web client for Bluesky
typescript solidjs bluesky atcute
at trunk 960 B view raw
1import { type ParentProps, createContext, createMemo, useContext } from 'solid-js'; 2 3export interface FieldsetContext { 4 readonly disabled: boolean; 5} 6 7const DEFAULT_FIELDSET: FieldsetContext = { 8 disabled: false, 9}; 10 11const Context = createContext<FieldsetContext>(DEFAULT_FIELDSET); 12 13export const useFieldset = (): FieldsetContext => { 14 return useContext(Context); 15}; 16 17export interface FieldsetProps extends ParentProps { 18 standalone?: boolean; 19 disabled?: boolean; 20} 21 22export const Fieldset = (props: FieldsetProps) => { 23 let context: FieldsetContext; 24 25 if (!('disabled' in props) && props.standalone) { 26 context = DEFAULT_FIELDSET; 27 } else { 28 const parent = useFieldset(); 29 30 const isDisabled = createMemo((): boolean => { 31 return (!props.standalone && parent.disabled) || !!props.disabled; 32 }); 33 34 context = { 35 get disabled() { 36 return isDisabled(); 37 }, 38 }; 39 } 40 41 return <Context.Provider value={context}>{props.children}</Context.Provider>; 42};