import React from 'react'; import { KintoneRestAPIClient } from '@kintone/rest-api-client'; import { Properties as KintoneFormFieldProperties } from '@kintone/rest-api-client/lib/src/client/types'; import moize from 'moize'; import invariant from 'tiny-invariant'; import { PLUGIN_ID } from '../common/global'; import KintonePluginAlert from '../common/ui/KintonePluginAlert'; import KintonePluginButton from '../common/ui/KintonePluginButton'; import KintonePluginDesc from '../common/ui/KintonePluginDesc'; import KintonePluginLabel from '../common/ui/KintonePluginLabel'; import KintonePluginRequire from '../common/ui/KintonePluginRequire'; import KintonePluginRow from '../common/ui/KintonePluginRow'; import KintonePluginSelect, { KintonePluginSelectOptionData } from '../common/ui/KintonePluginSelect'; import KintonePluginTitle from '../common/ui/KintonePluginTitle'; import styles from './Settings.module.css'; const cachedFormFieldsProperties = moize.promise(async (appId: number): Promise => { const client = new KintoneRestAPIClient(); const { properties } = await client.app.getFormFields({ app: appId, lang: 'en', preview: false }); return properties; }); const Settings: React.FC = () => { const config = kintone.plugin.app.getConfig(PLUGIN_ID); const appId = kintone.app.getId(); invariant(appId, 'The app ID is not available. Please ensure you are on a Kintone app page.'); const properties = React.use(cachedFormFieldsProperties(appId)); const fileFields = Object.values(properties).filter((property) => property.type === 'FILE'); const options: KintonePluginSelectOptionData[] = [ { key: '-', value: '', label: 'Select a File field', disabled: true }, // Default option ...fileFields.map((property) => ({ key: property.code, value: property.code, label: property.label, })), ]; const [template, setTemplate] = React.useState( () => options.find((option) => option.value === (config.template ?? ''))?.value ?? '', ); const handleOnSubmit = (e: React.FormEvent) => { e.preventDefault(); kintone.plugin.app.setConfig({ template }, () => { alert('The plug-in settings have been saved. Please update the app!'); window.location.href = `../../flow?app=${appId}`; }); }; const handleOnChangeTemplate = (e: React.ChangeEvent) => { setTemplate(e.target.value); }; const handleOnClickCancel = () => { window.location.href = `../../${appId}/plugin/`; }; return (
Settings for the Kintone Word output plugin
Template* Select a file field that contains the WORD template file. {fileFields.length === 0 ? ( No file fields found in the app. Please add a file field to use this plugin. ) : ( )} Cancel Save
); }; export default Settings;