use IIFE for entry points.

This commit is contained in:
2025-07-03 18:24:31 +09:00
parent 5926c08da5
commit 83f29b8e63
12 changed files with 64 additions and 51 deletions

View File

@@ -6,15 +6,16 @@ import Loading from '../common/Loading';
import MenuPanel from './MenuPanel';
interface DesktopAppProps {
pluginId: string;
event: kintone.events.AppRecordDetailShowEvent | kintone.events.MobileAppRecordDetailShowEvent;
}
const DesktopApp: React.FC<DesktopAppProps> = (props) => {
const { event } = props;
const { pluginId, event } = props;
return (
<ErrorBoundary FallbackComponent={ErrorFallback}>
<React.Suspense fallback={<Loading />}>
<MenuPanel event={event} />
<MenuPanel pluginId={pluginId} event={event} />
</React.Suspense>
</ErrorBoundary>
);

View File

@@ -9,7 +9,8 @@ import { saveAs } from 'file-saver';
import moize from 'moize';
import PizZip from 'pizzip';
import invariant from 'tiny-invariant';
import { DOCX_CONTENT_TYPE, LANGUAGE, PLUGIN_ID } from '../common/global';
import { DOCX_CONTENT_TYPE } from '../common/constants';
import { LANGUAGE } from '../common/kintoneUtils';
import { KintoneFormFieldProperties } from '../common/types';
import KintonePluginAlert from '../common/ui/KintonePluginAlert';
import KintonePluginButton from '../common/ui/KintonePluginButton';
@@ -19,6 +20,7 @@ interface TemplateData {
}
interface MenuPanelProps {
pluginId: string;
event: kintone.events.AppRecordDetailShowEvent | kintone.events.MobileAppRecordDetailShowEvent;
}
@@ -181,10 +183,10 @@ const record2data = (properties: KintoneFormFieldProperties, record: Partial<Kin
};
const MenuPanel: React.FC<MenuPanelProps> = (props) => {
const { event } = props;
const { pluginId, event } = props;
const appId = event.appId;
const properties = React.use(cachedFormFieldsProperties(appId));
const config = kintone.plugin.app.getConfig(PLUGIN_ID);
const config = kintone.plugin.app.getConfig(pluginId);
const template: string = config.template ?? '';
if (template === '') {
return (
@@ -218,6 +220,7 @@ const MenuPanel: React.FC<MenuPanelProps> = (props) => {
</KintonePluginAlert>
);
}
const handleOnClickOutputButton = (e: React.MouseEvent<HTMLButtonElement>) => {
e.preventDefault();
const client = new KintoneRestAPIClient();

View File

@@ -6,27 +6,29 @@ import DesktopApp from './DesktopApp';
import '../common/ui/51-modern-default.css';
kintone.events.on(
['app.record.detail.show', 'mobile.app.record.detail.show'],
async (event: kintone.events.AppRecordDetailShowEvent | kintone.events.MobileAppRecordDetailShowEvent) => {
const spaceElement =
event.type === 'app.record.detail.show'
? kintone.app.record.getHeaderMenuSpaceElement()
: kintone.mobile.app.getHeaderSpaceElement();
invariant(
spaceElement,
'The header menu space element is not available. Please ensure you are on a Kintone app record detail page.',
);
((PLUGIN_ID) => {
kintone.events.on(
['app.record.detail.show', 'mobile.app.record.detail.show'],
async (event: kintone.events.AppRecordDetailShowEvent | kintone.events.MobileAppRecordDetailShowEvent) => {
const spaceElement =
event.type === 'app.record.detail.show'
? kintone.app.record.getHeaderMenuSpaceElement()
: kintone.mobile.app.getHeaderSpaceElement();
invariant(
spaceElement,
'The header menu space element is not available. Please ensure you are on a Kintone app record detail page.',
);
const root = document.createElement('div');
spaceElement.appendChild(root);
const root = document.createElement('div');
spaceElement.appendChild(root);
ReactDOM.createRoot(root).render(
<React.StrictMode>
<DesktopApp event={event} />
</React.StrictMode>,
);
ReactDOM.createRoot(root).render(
<React.StrictMode>
<DesktopApp pluginId={PLUGIN_ID} event={event} />
</React.StrictMode>,
);
return event;
},
);
return event;
},
);
})(kintone.$PLUGIN_ID);