diff --git a/packages/app/constants/settings/components/widgetsView/index.jsx b/packages/app/constants/settings/components/widgetsView/index.jsx new file mode 100644 index 00000000..c48f7106 --- /dev/null +++ b/packages/app/constants/settings/components/widgetsView/index.jsx @@ -0,0 +1,59 @@ +import React from "react" +import * as antd from "antd" + +import { Icons } from "components/Icons" +import { openModal as openWidgetsBrowserModal } from "components/WidgetsBrowser" +import WidgetItemPreview from "components/WidgetItemPreview" + +import "./index.less" + +export default class WidgetsView extends React.Component { + state = { + loadedWidgets: this.props.ctx.currentValue ?? [], + } + + render() { + return
+
+ { + this.state.loadedWidgets.map((manifest) => { + return { + app.cores.widgets.uninstall(manifest._id) + }} + onInstall={() => { + app.cores.widgets.install(manifest._id) + }} + onUpdate={() => { + app.cores.widgets.install(manifest._id, { + update: true, + }) + }} + onChangeVisible={(visible) => { + app.cores.widgets.toogleVisibility(manifest._id, visible) + }} + /> + }) + } + +
+ } + onClick={openWidgetsBrowserModal} + > + Add widget + +
+
+
+ } +} \ No newline at end of file diff --git a/packages/app/constants/settings/components/widgetsView/index.less b/packages/app/constants/settings/components/widgetsView/index.less new file mode 100644 index 00000000..76c23b9a --- /dev/null +++ b/packages/app/constants/settings/components/widgetsView/index.less @@ -0,0 +1,54 @@ +.widgets_load { + display: flex; + flex-direction: column; + + gap: 20px; + + .widgets_load_list { + display: flex; + flex-direction: column; + + gap: 10px; + + .widget_load_list_item { + display: flex; + flex-direction: row; + + align-items: center; + justify-content: space-between; + + padding: 10px; + + border: 1px var(--border-color) solid; + border-radius: 12px; + + .widget_load_list_item_info { + display: flex; + flex-direction: row; + + gap: 20px; + } + + .widget_load_list_item_icon { + display: flex; + flex-direction: row; + + align-items: center; + justify-content: center; + + align-self: center; + + height: 60px; + width: 60px; + + img { + height: 100%; + width: 100%; + + object-fit: contain; + } + + } + } + } +} \ No newline at end of file diff --git a/packages/app/constants/settings/widgets/index.jsx b/packages/app/constants/settings/widgets/index.jsx new file mode 100644 index 00000000..e1ac97e8 --- /dev/null +++ b/packages/app/constants/settings/widgets/index.jsx @@ -0,0 +1,25 @@ +import loadable from "@loadable/component" + +export default { + id: "widgets", + icon: "List", + label: "Widgets", + group: "app", + settings: [ + { + id: "widgets.urls", + title: "Widgets", + icon: "List", + component: loadable(() => import("../components/widgetsView")), + defaultValue: () => { + if (typeof app.cores.widgets === "undefined") { + return [] + } + + return app.cores.widgets.getInstalled() + }, + reloadValueOnUpdateEvent: "widgets:update", + storaged: false, + } + ] +} \ No newline at end of file