From 13c968ecea1f610f80998f2cadd8e506d73f3e08 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Tue, 16 May 2023 19:39:36 +0000 Subject: [PATCH] added `widgets` settings --- .../settings/components/widgetsView/index.jsx | 59 +++++++++++++++++++ .../components/widgetsView/index.less | 54 +++++++++++++++++ .../app/constants/settings/widgets/index.jsx | 25 ++++++++ 3 files changed, 138 insertions(+) create mode 100644 packages/app/constants/settings/components/widgetsView/index.jsx create mode 100644 packages/app/constants/settings/components/widgetsView/index.less create mode 100644 packages/app/constants/settings/widgets/index.jsx 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