zod-form-kit
Version:
UI-agnostic form generation library based on Zod schemas with extensible adapter pattern
61 lines (60 loc) • 2.88 kB
JavaScript
import { useCallback } from 'react';
import { pluginRegistry, registerFieldRenderer, registerUIAdapter, getRegisteredRenderer, getUIAdapter, getDefaultAdapter, setDefaultAdapter, registerSchemaPatternRenderer, getMatchingPatternRenderer, removeSchemaPatternRenderer, getAllPatternRenderers, clearPatternRenderers } from '../utils/plugin-registry';
/**
* React hook for accessing the plugin system functionality
*/
export function usePluginSystem() {
const registerFieldRendererCallback = useCallback((fieldType, component) => {
registerFieldRenderer(fieldType, component);
}, []);
const registerUIAdapterCallback = useCallback((adapter) => {
registerUIAdapter(adapter);
}, []);
const getRegisteredRendererCallback = useCallback((fieldType) => {
return getRegisteredRenderer(fieldType);
}, []);
const getUIAdapterCallback = useCallback((adapterName) => {
return getUIAdapter(adapterName);
}, []);
const getDefaultAdapterCallback = useCallback(() => {
return getDefaultAdapter();
}, []);
const setDefaultAdapterCallback = useCallback((adapterName) => {
setDefaultAdapter(adapterName);
}, []);
// Pattern registration callbacks
const registerSchemaPatternRendererCallback = useCallback((id, matcher, component, priority) => {
registerSchemaPatternRenderer(id, matcher, component, priority);
}, []);
const getMatchingPatternRendererCallback = useCallback((zodSchema, parsedField, formValue) => {
return getMatchingPatternRenderer(zodSchema, parsedField, formValue);
}, []);
const removeSchemaPatternRendererCallback = useCallback((id) => {
return removeSchemaPatternRenderer(id);
}, []);
const getAllPatternRenderersCallback = useCallback(() => {
return getAllPatternRenderers();
}, []);
const clearPatternRenderersCallback = useCallback(() => {
clearPatternRenderers();
}, []);
return {
// Registration methods
registerFieldRenderer: registerFieldRendererCallback,
registerUIAdapter: registerUIAdapterCallback,
// Retrieval methods
getRegisteredRenderer: getRegisteredRendererCallback,
getUIAdapter: getUIAdapterCallback,
getDefaultAdapter: getDefaultAdapterCallback,
// Configuration methods
setDefaultAdapter: setDefaultAdapterCallback,
// Pattern registration methods
registerSchemaPatternRenderer: registerSchemaPatternRendererCallback,
getMatchingPatternRenderer: getMatchingPatternRendererCallback,
removeSchemaPatternRenderer: removeSchemaPatternRendererCallback,
getAllPatternRenderers: getAllPatternRenderersCallback,
clearPatternRenderers: clearPatternRenderersCallback,
// Direct access to registry for advanced usage
registry: pluginRegistry
};
}