"use strict";
var __webpack_require__ = {};
(()=>{
    __webpack_require__.d = function(exports1, definition) {
        for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
            enumerable: true,
            get: definition[key]
        });
    };
})();
(()=>{
    __webpack_require__.o = function(obj, prop) {
        return Object.prototype.hasOwnProperty.call(obj, prop);
    };
})();
(()=>{
    __webpack_require__.r = function(exports1) {
        if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
            value: 'Module'
        });
        Object.defineProperty(exports1, '__esModule', {
            value: true
        });
    };
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
    RemoteSchemaTemplateManagerPlugin: ()=>RemoteSchemaTemplateManagerPlugin,
    SchemaTemplateManagerProvider: ()=>SchemaTemplateManagerProvider,
    regenerateUid: ()=>regenerateUid,
    useSchemaTemplate: ()=>useSchemaTemplate,
    SchemaTemplateManagerContext: ()=>SchemaTemplateManagerContext,
    RemoteSchemaTemplateManagerProvider: ()=>RemoteSchemaTemplateManagerProvider
});
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
const external_react_namespaceObject = require("react");
const schema_namespaceObject = require("@tachybase/schema");
const index_js_namespaceObject = require("../api-client/index.js");
const Plugin_js_namespaceObject = require("../application/Plugin.js");
const external_BlockTemplate_js_namespaceObject = require("./BlockTemplate.js");
const external_useSchemaTemplateManager_js_namespaceObject = require("./useSchemaTemplateManager.js");
const SchemaTemplateManagerContext = /*#__PURE__*/ (0, external_react_namespaceObject.createContext)({});
SchemaTemplateManagerContext.displayName = 'SchemaTemplateManagerContext';
const SchemaTemplateManagerProvider = (props)=>{
    const { templates, refresh } = props;
    return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(SchemaTemplateManagerContext.Provider, {
        value: {
            templates,
            refresh
        },
        children: props.children
    });
};
const regenerateUid = (s)=>{
    s['name'] = s['x-uid'] = (0, schema_namespaceObject.uid)();
    Object.keys(s.properties || {}).forEach((key)=>{
        regenerateUid(s.properties[key]);
    });
};
const useSchemaTemplate = ()=>{
    const { getTemplateBySchema } = (0, external_useSchemaTemplateManager_js_namespaceObject.useSchemaTemplateManager)();
    const fieldSchema = (0, schema_namespaceObject.useFieldSchema)();
    const schemaId = fieldSchema['x-uid'];
    const templateKey = fieldSchema['x-template-key'];
    const result = (0, external_react_namespaceObject.useMemo)(()=>getTemplateBySchema(fieldSchema), [
        schemaId,
        templateKey
    ]);
    return result;
};
const InternalRemoteSchemaTemplateManagerProvider = (props)=>{
    var _service_data;
    const api = (0, index_js_namespaceObject.useAPIClient)();
    const options = {
        resource: 'uiSchemaTemplates',
        action: 'list',
        params: {
            paginate: false
        }
    };
    const service = (0, index_js_namespaceObject.useRequest)(options);
    if (service.loading && !service.data) return;
    return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(SchemaTemplateManagerProvider, {
        refresh: async ()=>{
            const { data } = await api.request(options);
            service.mutate(data);
        },
        templates: null == service ? void 0 : null === (_service_data = service.data) || void 0 === _service_data ? void 0 : _service_data.data,
        children: props.children
    });
};
const RemoteSchemaTemplateManagerProvider = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(InternalRemoteSchemaTemplateManagerProvider, {
        children: props.children
    });
class RemoteSchemaTemplateManagerPlugin extends Plugin_js_namespaceObject.Plugin {
    async load() {
        this.addComponents();
        this.app.addProviders([
            RemoteSchemaTemplateManagerProvider
        ]);
    }
    addComponents() {
        this.app.addComponents({
            BlockTemplate: external_BlockTemplate_js_namespaceObject.BlockTemplate
        });
    }
}
var __webpack_export_target__ = exports;
for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
    value: true
});
