@voplus/morpho-workspace 1.1.0-dev034 → 1.1.0-dev035

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/es/modules/calendar/pages/CalendarMonth/index.js +2 -1
  2. package/es/modules/calendar/pages/CalendarMonth/index.js.map +1 -1
  3. package/es/modules/meeting/MeetingRoutes.d.ts +3 -1
  4. package/es/modules/meeting/components/AgendaList/AgendaItem/index.js +6 -6
  5. package/es/modules/meeting/components/AgendaList/AgendaItem/index.js.map +1 -1
  6. package/es/modules/meeting/components/MeetingDescription/index.js +5 -12
  7. package/es/modules/meeting/components/MeetingDescription/index.js.map +1 -1
  8. package/es/modules/meeting/components/MeetingHeader/index.js +7 -2
  9. package/es/modules/meeting/components/MeetingHeader/index.js.map +1 -1
  10. package/es/modules/meeting/pages/MeetingList/index.d.ts +3 -1
  11. package/es/modules/meeting/pages/MeetingList/index.js +3 -2
  12. package/es/modules/meeting/pages/MeetingList/index.js.map +1 -1
  13. package/es/modules/meeting/pages/MeetingPrintView/index.js +2 -3
  14. package/es/modules/meeting/pages/MeetingPrintView/index.js.map +1 -1
  15. package/es/modules/meeting/pages/MeetingTabView/index.js +4 -8
  16. package/es/modules/meeting/pages/MeetingTabView/index.js.map +1 -1
  17. package/es/modules/tasks/TasksRoutes.d.ts +3 -1
  18. package/es/modules/tasks/components/NewTaskForm/index.js +1 -1
  19. package/es/modules/tasks/components/NewTaskForm/index.js.map +1 -1
  20. package/es/modules/tasks/components/TaskDescription/index.js +7 -10
  21. package/es/modules/tasks/components/TaskDescription/index.js.map +1 -1
  22. package/es/modules/tasks/components/TaskItem/SubTaskItem.js +17 -8
  23. package/es/modules/tasks/components/TaskItem/SubTaskItem.js.map +1 -1
  24. package/es/modules/tasks/components/TaskItem/state.d.ts +2 -0
  25. package/es/modules/tasks/components/TaskItem/state.js.map +1 -1
  26. package/es/modules/tasks/components/TaskItem/subTaskItem.less +12 -1
  27. package/es/modules/tasks/components/TaskPropertiesView/index.js +12 -11
  28. package/es/modules/tasks/components/TaskPropertiesView/index.js.map +1 -1
  29. package/es/modules/tasks/components/TaskQuickViewDialog/index.js +6 -2
  30. package/es/modules/tasks/components/TaskQuickViewDialog/index.js.map +1 -1
  31. package/es/modules/tasks/pages/TaskList/index.d.ts +3 -1
  32. package/es/modules/tasks/pages/TaskList/index.js +3 -2
  33. package/es/modules/tasks/pages/TaskList/index.js.map +1 -1
  34. package/es/modules/tasks/pages/TaskTabView/index.js +25 -25
  35. package/es/modules/tasks/pages/TaskTabView/index.js.map +1 -1
  36. package/es/pages/Project/ProjectDefaultView/index.d.ts +3 -0
  37. package/es/pages/Project/ProjectDefaultView/index.js +65 -0
  38. package/es/pages/Project/ProjectDefaultView/index.js.map +1 -0
  39. package/es/pages/Project/ProjectDefaultView/index.less +22 -0
  40. package/es/pages/Project/data/ProjectStore.d.ts +10 -0
  41. package/es/pages/Project/data/ProjectStore.js +16 -0
  42. package/es/pages/Project/data/ProjectStore.js.map +1 -0
  43. package/es/pages/Project/data/hook.d.ts +9 -0
  44. package/es/pages/Project/data/hook.js +20 -0
  45. package/es/pages/Project/data/hook.js.map +1 -0
  46. package/es/pages/Project/data/index.d.ts +3 -0
  47. package/es/pages/Project/data/index.js +4 -0
  48. package/es/pages/Project/data/index.js.map +1 -0
  49. package/es/pages/Project/data/interfaces.d.ts +2 -0
  50. package/es/pages/Project/data/interfaces.js +1 -0
  51. package/es/pages/Project/data/interfaces.js.map +1 -0
  52. package/es/pages/Routes.d.ts +23 -0
  53. package/es/pages/Routes.js +51 -0
  54. package/es/pages/Routes.js.map +1 -0
  55. package/es/pages/Space/components/Documents/index.d.ts +6 -0
  56. package/es/pages/Space/components/Documents/index.js +41 -0
  57. package/es/pages/Space/components/Documents/index.js.map +1 -0
  58. package/es/pages/Space/components/Documents/index.less +9 -0
  59. package/es/pages/Space/components/Notes/index.d.ts +4 -0
  60. package/es/pages/Space/components/Notes/index.js +26 -0
  61. package/es/pages/Space/components/Notes/index.js.map +1 -0
  62. package/es/pages/Space/components/Notes/index.less +0 -0
  63. package/es/pages/Space/components/Projects/index.d.ts +6 -0
  64. package/es/pages/Space/components/Projects/index.js +36 -0
  65. package/es/pages/Space/components/Projects/index.js.map +1 -0
  66. package/es/pages/Space/components/Projects/index.less +0 -0
  67. package/es/pages/Space/components/Tasks/index.d.ts +7 -0
  68. package/es/pages/Space/components/Tasks/index.js +43 -0
  69. package/es/pages/Space/components/Tasks/index.js.map +1 -0
  70. package/es/pages/Space/components/Tasks/index.less +17 -0
  71. package/es/pages/Space/components/TextNoteCard/index.d.ts +6 -0
  72. package/es/pages/Space/components/TextNoteCard/index.js +22 -0
  73. package/es/pages/Space/components/TextNoteCard/index.js.map +1 -0
  74. package/es/pages/Space/components/TextNoteCard/index.less +29 -0
  75. package/es/pages/Space/components/Works/index.d.ts +6 -0
  76. package/es/pages/Space/components/Works/index.js +43 -0
  77. package/es/pages/Space/components/Works/index.js.map +1 -0
  78. package/es/pages/Space/components/Works/index.less +18 -0
  79. package/es/pages/Space/pages/MySpace/index.d.ts +4 -0
  80. package/es/pages/Space/pages/MySpace/index.js +65 -0
  81. package/es/pages/Space/pages/MySpace/index.js.map +1 -0
  82. package/es/pages/Space/pages/MySpace/index.less +60 -0
  83. package/es/pages/Space/pages/MySpace/state.d.ts +9 -0
  84. package/es/pages/Space/pages/MySpace/state.js +31 -0
  85. package/es/pages/Space/pages/MySpace/state.js.map +1 -0
  86. package/es/pages/Work/components/ActionPlan/Item.d.ts +5 -0
  87. package/es/pages/Work/components/ActionPlan/Item.js +88 -0
  88. package/es/pages/Work/components/ActionPlan/Item.js.map +1 -0
  89. package/es/pages/Work/components/ActionPlan/index.d.ts +6 -0
  90. package/es/pages/Work/components/ActionPlan/index.js +53 -0
  91. package/es/pages/Work/components/ActionPlan/index.js.map +1 -0
  92. package/es/pages/Work/components/ActionPlan/index.less +96 -0
  93. package/es/pages/Work/components/ActionPlan/state.d.ts +15 -0
  94. package/es/pages/Work/components/ActionPlan/state.js +40 -0
  95. package/es/pages/Work/components/ActionPlan/state.js.map +1 -0
  96. package/es/pages/Work/components/ActionType/index.d.ts +15 -0
  97. package/es/pages/Work/components/ActionType/index.js +32 -0
  98. package/es/pages/Work/components/ActionType/index.js.map +1 -0
  99. package/es/pages/Work/components/ActionType/index.less +20 -0
  100. package/es/pages/Work/components/ScheduleActionForm/index.d.ts +10 -0
  101. package/es/pages/Work/components/ScheduleActionForm/index.js +50 -0
  102. package/es/pages/Work/components/ScheduleActionForm/index.js.map +1 -0
  103. package/es/pages/Work/components/ScheduleActionForm/index.less +15 -0
  104. package/es/pages/Work/components/WorkCheckList/index.d.ts +5 -0
  105. package/es/pages/Work/components/WorkCheckList/index.js +38 -0
  106. package/es/pages/Work/components/WorkCheckList/index.js.map +1 -0
  107. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/index.d.ts +6 -0
  108. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/index.js +28 -0
  109. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/index.js.map +1 -0
  110. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/state.d.ts +4 -0
  111. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/state.js +8 -0
  112. package/es/pages/Work/components/WorkSummaryCards/WorkActionsCard/state.js.map +1 -0
  113. package/es/pages/Work/components/WorkSummaryCards/WorkBlockingsCard/index.d.ts +5 -0
  114. package/es/pages/Work/components/WorkSummaryCards/WorkBlockingsCard/index.js +11 -0
  115. package/es/pages/Work/components/WorkSummaryCards/WorkBlockingsCard/index.js.map +1 -0
  116. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/index.d.ts +5 -0
  117. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/index.js +22 -0
  118. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/index.js.map +1 -0
  119. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/state.d.ts +3 -0
  120. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/state.js +8 -0
  121. package/es/pages/Work/components/WorkSummaryCards/WorkDueCard/state.js.map +1 -0
  122. package/es/pages/Work/components/WorkSummaryCards/index.d.ts +5 -0
  123. package/es/pages/Work/components/WorkSummaryCards/index.js +57 -0
  124. package/es/pages/Work/components/WorkSummaryCards/index.js.map +1 -0
  125. package/es/pages/Work/components/WorkSummaryCards/index.less +32 -0
  126. package/es/pages/Work/components/WorkSummaryCards/state.d.ts +8 -0
  127. package/es/pages/Work/components/WorkSummaryCards/state.js +22 -0
  128. package/es/pages/Work/components/WorkSummaryCards/state.js.map +1 -0
  129. package/es/pages/Work/components/WorkTrail/index.d.ts +5 -0
  130. package/es/pages/Work/components/WorkTrail/index.js +14 -0
  131. package/es/pages/Work/components/WorkTrail/index.js.map +1 -0
  132. package/es/pages/Work/components/WorkTrail/index.less +18 -0
  133. package/es/pages/Work/data/ActionStore.d.ts +65 -0
  134. package/es/pages/Work/data/ActionStore.js +90 -0
  135. package/es/pages/Work/data/ActionStore.js.map +1 -0
  136. package/es/pages/Work/data/WorkContext.d.ts +12 -0
  137. package/es/pages/Work/data/WorkContext.js +26 -0
  138. package/es/pages/Work/data/WorkContext.js.map +1 -0
  139. package/es/pages/Work/data/WorkStore.d.ts +10 -0
  140. package/es/pages/Work/data/WorkStore.js +16 -0
  141. package/es/pages/Work/data/WorkStore.js.map +1 -0
  142. package/es/pages/Work/data/hook.d.ts +8 -0
  143. package/es/pages/Work/data/hook.js +44 -0
  144. package/es/pages/Work/data/hook.js.map +1 -0
  145. package/es/pages/Work/data/index.d.ts +6 -0
  146. package/es/pages/Work/data/index.js +7 -0
  147. package/es/pages/Work/data/index.js.map +1 -0
  148. package/es/pages/Work/data/interfaces.d.ts +36 -0
  149. package/es/pages/Work/data/interfaces.js +1 -0
  150. package/es/pages/Work/data/interfaces.js.map +1 -0
  151. package/es/pages/Work/data/useActionListEffect.d.ts +7 -0
  152. package/es/pages/Work/data/useActionListEffect.js +15 -0
  153. package/es/pages/Work/data/useActionListEffect.js.map +1 -0
  154. package/es/pages/Work/pages/WorkDefaultView/index.d.ts +3 -0
  155. package/es/pages/Work/pages/WorkDefaultView/index.js +59 -0
  156. package/es/pages/Work/pages/WorkDefaultView/index.js.map +1 -0
  157. package/es/pages/Work/pages/WorkDefaultView/index.less +12 -0
  158. package/es/pages/Work/pages/WorkDefaultView/state.d.ts +4 -0
  159. package/es/pages/Work/pages/WorkDefaultView/state.js +12 -0
  160. package/es/pages/Work/pages/WorkDefaultView/state.js.map +1 -0
  161. package/es/routes.js +2 -0
  162. package/es/routes.js.map +1 -1
  163. package/package.json +4 -4
@@ -0,0 +1,88 @@
1
+ import { Button, Input, Modal, Tooltip } from "@voplus/antd";
2
+ import React, { useEffect, useState } from "react";
3
+ import { faSave, faTrashAlt, faUndo } from "@fortawesome/pro-light-svg-icons";
4
+ import { useAction, useActionStore } from "../../data";
5
+ import ActionType from "../ActionType";
6
+ import DateInputEditor from "@voplus/morpho-ui/es/controls/InlineEdit/editors/DateInputEditor";
7
+ import { Edit } from "@voplus/morpho-document/es/controls/ToolBar/buttons";
8
+ import { FontAwesomeIcon as FAIcon } from "@fortawesome/react-fontawesome";
9
+ import { InlineEdit } from "@voplus/morpho-ui";
10
+ import { ItemState } from "./state";
11
+ import ToolBar2 from "@voplus/morpho-document/es/controls/ToolBar/ToolBar2";
12
+ import classnames from "classnames";
13
+ import { isEqual } from "lodash-es";
14
+ import moment from "moment";
15
+ import { useObserver } from "mobx-react-lite";
16
+ const Item = (props) => {
17
+ const { id } = props;
18
+ const [state] = useState(new ItemState());
19
+ const store = useActionStore();
20
+ state.action = useAction(id);
21
+ useEffect(() => {
22
+ state.note = state.action.note ? state.action.note : "";
23
+ }, [state.action.note]);
24
+ return useObserver(() => (React.createElement("div", { className: classnames("action-item", {
25
+ "action-item_hover": state.isHover
26
+ }), onMouseLeave: () => (state.isHover = false), onMouseOver: () => (state.isHover = true) },
27
+ state.action.due && (React.createElement("div", { className: classnames("data-icon") },
28
+ React.createElement(InlineEdit, { defaultValue: moment(state.action.due), content: v => (React.createElement("span", { style: { cursor: "pointer" } }, v ? moment(v.store.value).format("DD MMM YYYY") : "Add Date")), editor: DateInputEditor, onSave: onSave }))),
29
+ React.createElement("div", { className: "action-context" },
30
+ React.createElement(ActionType, { type: state.action.type, className: "action-type", onchange: type => store.editAction(state.action.id, { Type: type }) }),
31
+ state.editable ? (React.createElement(Input.TextArea, { autoSize: true, autoFocus: true, value: state.note, onChange: e => (state.note = e.target.value) })) : (React.createElement("span", { className: "action-note" }, state.note))),
32
+ React.createElement("div", null,
33
+ state.isHover && !state.editable && (React.createElement("div", { className: classnames("hover-operate-icon", { show: state.isHover }) },
34
+ React.createElement(ToolBar2, { id: state.action.id, showMenu: false },
35
+ React.createElement(Edit, { action: onEdit }),
36
+ React.createElement(Tooltip, { title: "Eelete" },
37
+ React.createElement(Button, { size: "small", shape: "circle", className: "delete-btn", onClick: onDelete },
38
+ React.createElement(FAIcon, { icon: faTrashAlt })))))),
39
+ state.editable && (React.createElement("div", { className: "editable-save" },
40
+ React.createElement(Button, { size: "small", shape: "circle", onClick: () => {
41
+ state.editable = false;
42
+ state.note = state.action.note ? state.action.note : "";
43
+ } },
44
+ React.createElement(FAIcon, { icon: faUndo })),
45
+ React.createElement(Button, { type: "primary", ghost: true, size: "small", shape: "circle", disabled: !hasChanges, loading: state.loading, className: "margin-left-10", onClick: save },
46
+ React.createElement(FAIcon, { icon: faSave }))))))));
47
+ /** delete action */
48
+ function onDelete() {
49
+ Modal.confirm({
50
+ title: "Do you want to delete this item?",
51
+ onOk() {
52
+ return store.deleteAction([id], {});
53
+ }
54
+ });
55
+ }
56
+ /** edit text */
57
+ function onEdit() {
58
+ state.isHover = false;
59
+ state.editable = true;
60
+ }
61
+ function hasChanges() {
62
+ if (!state.note)
63
+ return;
64
+ const name = state.action.note;
65
+ const originalData = { name };
66
+ const modifiedData = {
67
+ name: state.note.trim()
68
+ };
69
+ return !isEqual(originalData, modifiedData);
70
+ }
71
+ // update note
72
+ async function save() {
73
+ const params = { Note: state.note };
74
+ state.loading = true;
75
+ await store.editAction(id, params);
76
+ state.loading = false;
77
+ state.editable = false;
78
+ }
79
+ // update date
80
+ function onSave(v) {
81
+ // date未变更不保存
82
+ if (moment(v).isSame(state.action.due, "day"))
83
+ return;
84
+ store.editAction(id, { Due: v.format("YYYY-MM-DD") });
85
+ }
86
+ };
87
+ export default Item;
88
+ //# sourceMappingURL=Item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/ActionPlan/Item.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ declare const ActionPlan: (props: {
3
+ id: string;
4
+ className?: string;
5
+ }) => JSX.Element;
6
+ export default ActionPlan;
@@ -0,0 +1,53 @@
1
+ import { useActionListEffect, useOnDeleteAction, useOnNewAction, useWorkContext } from "../../data";
2
+ import React, { useState } from "react";
3
+ import { faFilePlus, faPlus } from "@fortawesome/pro-light-svg-icons";
4
+ import { FontAwesomeIcon as FAIcon } from "@fortawesome/react-fontawesome";
5
+ import Item from "./Item";
6
+ import ScheduleActionForm from "../ScheduleActionForm";
7
+ import { State } from "./state";
8
+ import { Timeline } from "@voplus/antd";
9
+ import classnames from "classnames";
10
+ import moment from "moment";
11
+ import styles from "./index.less";
12
+ import { useObserver } from "mobx-react-lite";
13
+ const ActionPlan = (props) => {
14
+ const { id } = props;
15
+ const [state] = useState(new State());
16
+ const context = useWorkContext();
17
+ useActionListEffect(list => {
18
+ state.list = list;
19
+ const actions = list === null || list === void 0 ? void 0 : list.slice().sort((a, b) => moment(a === null || a === void 0 ? void 0 : a.due).valueOf() - moment(b === null || b === void 0 ? void 0 : b.due).valueOf());
20
+ /** 最早到期的action */
21
+ // context.setActionItem(actions[0]);
22
+ context.actionItem = actions[0];
23
+ }, {
24
+ Filters: [{ c: "ParentNodeId", o: "=", l: "And", v1: id }]
25
+ });
26
+ useOnNewAction((s, action) => {
27
+ if (action.parentNodeID === id)
28
+ state.list = [...state.list, action];
29
+ });
30
+ useOnDeleteAction((s, action) => {
31
+ if (action.parentNodeID === id)
32
+ state.list = state.list.filter(item => item.id !== action.id);
33
+ });
34
+ const dotElement = (log) => {
35
+ return (React.createElement("span", { className: "dot-icon", style: { borderColor: "#8bc34a" } },
36
+ React.createElement(FAIcon, { icon: faFilePlus, color: "#8bc34a" })));
37
+ };
38
+ return useObserver(() => {
39
+ var _a;
40
+ return (React.createElement(Timeline, { className: classnames(styles["action-plan"], props.className) },
41
+ React.createElement(Timeline.Item, { key: "add", dot: React.createElement(FAIcon, { style: { fontSize: "17px" }, icon: faPlus }) },
42
+ !state.visible && (React.createElement("div", { id: "ActionPlan", className: "add-action", onClick: changeVisible }, "Schedule an action")),
43
+ React.createElement(ScheduleActionForm, { id: id, className: state.visible ? "show" : "", cancel: changeVisible, finish: changeVisible })), (_a = state.list) === null || _a === void 0 ? void 0 :
44
+ _a.map((item, index) => (React.createElement(Timeline.Item, { key: index, dot: dotElement(item) },
45
+ React.createElement(Item, { id: item.id }))))));
46
+ });
47
+ /** create new action */
48
+ function changeVisible() {
49
+ state.visible = !state.visible;
50
+ }
51
+ };
52
+ export default ActionPlan;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/ActionPlan/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ @import "~@voplus/antd/es/style/themes/default";
2
+
3
+ .action-plan {
4
+ // height: 100%;
5
+ padding: 13px 0 0 15px;
6
+ margin: 15px 20px;
7
+ :global {
8
+ .dot-icon {
9
+ display: inline-block;
10
+ width: 30px;
11
+ height: 30px;
12
+ line-height: 28px;
13
+ border: 1px solid transparent;
14
+ border-radius: 50%;
15
+ font-size: 17px;
16
+ }
17
+ .add-action {
18
+ color: #1890ff;
19
+ padding-top: 3px;
20
+ cursor: pointer;
21
+ }
22
+ .action-item {
23
+ .hover-operate-icon {
24
+ display: flex;
25
+ position: absolute;
26
+ right: 0;
27
+ top: 50%;
28
+ transform: translateY(-50%);
29
+ z-index: 100;
30
+ align-items: center;
31
+ visibility: hidden;
32
+ .delete-btn {
33
+ color: #f5222d;
34
+ background: #fff;
35
+ border-color: #f5222d;
36
+ cursor: pointer;
37
+ &:hover {
38
+ background-color: #f5222d;
39
+ color: #fff;
40
+ }
41
+ }
42
+ &.show {
43
+ // display: block;
44
+ visibility: visible;
45
+ }
46
+ }
47
+ .editable-save{
48
+ display: flex;
49
+ position: absolute;
50
+ right: 0;
51
+ top: 50%;
52
+ transform: translateY(-50%);
53
+ z-index: 100;
54
+ align-items: center;
55
+ }
56
+ .action-context{
57
+ display: flex;
58
+ textarea.ant-input{
59
+ flex: 0.8;
60
+ }
61
+ }
62
+ .action-type {
63
+ padding-right: 10px;
64
+ color: #000;
65
+ font-style: italic;
66
+ }
67
+ .action-note {
68
+ padding-right: 15px;
69
+ font-weight: 500;
70
+ color: #000;
71
+ }
72
+ .date-time {
73
+ font-size: 14px;
74
+ color: #444;
75
+ }
76
+ }
77
+
78
+ .ant-timeline-item-content {
79
+ top: -14px;
80
+ margin: 0 0 0 50px;
81
+ line-height: 28px;
82
+ color: #333;
83
+ }
84
+ .schedule-action-form {
85
+ height: 0;
86
+ opacity: 0;
87
+ transition: height 0.3s, opacity 0.2s ease-out;
88
+ overflow: hidden;
89
+ &.show {
90
+ height: auto;
91
+ opacity: 1;
92
+ overflow: visible;
93
+ }
94
+ }
95
+ }
96
+ }
@@ -0,0 +1,15 @@
1
+ import { IAction } from "../../data";
2
+ export declare class State {
3
+ list: IAction[];
4
+ /** visible ScheduleActionForm */
5
+ visible: boolean;
6
+ }
7
+ export declare class ItemState {
8
+ action: IAction;
9
+ /** action item note */
10
+ note: string;
11
+ isHover: boolean;
12
+ editable: boolean;
13
+ /** 保存数据加载中 */
14
+ loading: boolean;
15
+ }
@@ -0,0 +1,40 @@
1
+ import { __decorate } from "tslib";
2
+ import { observable } from "mobx";
3
+ export class State {
4
+ constructor() {
5
+ /** visible ScheduleActionForm */
6
+ this.visible = false;
7
+ }
8
+ }
9
+ __decorate([
10
+ observable
11
+ ], State.prototype, "list", void 0);
12
+ __decorate([
13
+ observable
14
+ ], State.prototype, "visible", void 0);
15
+ export class ItemState {
16
+ constructor() {
17
+ /** action item note */
18
+ this.note = "";
19
+ this.isHover = false;
20
+ this.editable = false;
21
+ /** 保存数据加载中 */
22
+ this.loading = false;
23
+ }
24
+ }
25
+ __decorate([
26
+ observable
27
+ ], ItemState.prototype, "action", void 0);
28
+ __decorate([
29
+ observable
30
+ ], ItemState.prototype, "note", void 0);
31
+ __decorate([
32
+ observable
33
+ ], ItemState.prototype, "isHover", void 0);
34
+ __decorate([
35
+ observable
36
+ ], ItemState.prototype, "editable", void 0);
37
+ __decorate([
38
+ observable
39
+ ], ItemState.prototype, "loading", void 0);
40
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/ActionPlan/state.ts"],"names":[],"mappings":";AAAA,OAAO,EAAU,UAAU,EAAE,MAAM,MAAM,CAAC;AAI1C,MAAM,OAAO,KAAK;IAAlB;QAEC,kCAAkC;QACf,YAAO,GAAG,KAAK,CAAC;IACpC,CAAC;CAAA;AAHY;IAAX,UAAU;mCAAwB;AAEvB;IAAX,UAAU;sCAAwB;AAGpC,MAAM,OAAO,SAAS;IAAtB;QAEC,uBAAuB;QACJ,SAAI,GAAG,EAAE,CAAC;QACV,YAAO,GAAG,KAAK,CAAC;QAChB,aAAQ,GAAG,KAAK,CAAC;QACpC,cAAc;QACK,YAAO,GAAG,KAAK,CAAC;IACpC,CAAC;CAAA;AAPY;IAAX,UAAU;yCAAwB;AAEvB;IAAX,UAAU;uCAAkB;AACjB;IAAX,UAAU;0CAAwB;AACvB;IAAX,UAAU;2CAAyB;AAExB;IAAX,UAAU;0CAAwB"}
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ import "./index.less";
3
+ declare const ActionType: {
4
+ (props: {
5
+ editable?: boolean | undefined;
6
+ type: "Followup" | "Meeting" | "Call";
7
+ size?: "lg" | "sm" | "xs" | undefined;
8
+ className?: string | undefined;
9
+ onchange?: ((params?: any) => void) | undefined;
10
+ }): JSX.Element;
11
+ defaultProps: {
12
+ editable: boolean;
13
+ };
14
+ };
15
+ export default ActionType;
@@ -0,0 +1,32 @@
1
+ import "./index.less";
2
+ import { Dropdown, Menu } from "@voplus/antd";
3
+ import React, { useEffect, useState } from "react";
4
+ import { faExclamationCircle, faStar } from "@fortawesome/free-solid-svg-icons";
5
+ import classnames from "classnames";
6
+ import { faCircle } from "@fortawesome/pro-light-svg-icons";
7
+ import { library } from "@fortawesome/fontawesome-svg-core";
8
+ import { useObserver } from "mobx-react-lite";
9
+ library.add(faStar, faCircle, faExclamationCircle);
10
+ const ActionType = (props) => {
11
+ const { editable } = props;
12
+ const [type, setType] = useState(props.type);
13
+ const menu = useObserver(() => (React.createElement(Menu, { onClick: onClick, className: "flag-menu" },
14
+ React.createElement(Menu.Item, { key: "Followup" }, "Followup"),
15
+ React.createElement(Menu.Item, { key: "Meeting" }, "Meeting"),
16
+ React.createElement(Menu.Item, { key: "Call" }, "Call"))));
17
+ useEffect(() => {
18
+ setType(props.type);
19
+ }, [props.type]);
20
+ return useObserver(() => (React.createElement(React.Fragment, null, editable ? (React.createElement(Dropdown, { overlay: menu, trigger: ["click", "hover"] },
21
+ React.createElement("span", { className: classnames("action-type", props.className) }, type))) : (React.createElement("span", { className: classnames("action-type", "readonly", props.className) }, type)))));
22
+ function onClick({ key }) {
23
+ var _a;
24
+ setType(key);
25
+ (_a = props.onchange) === null || _a === void 0 ? void 0 : _a.call(props, key);
26
+ }
27
+ };
28
+ ActionType.defaultProps = {
29
+ editable: true
30
+ };
31
+ export default ActionType;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/ActionType/index.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAEhF,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,CAAC,KAMnB,EAAE,EAAE;IACJ,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAC9B,oBAAC,IAAI,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW;QAC7C,oBAAC,IAAI,CAAC,IAAI,IAAC,GAAG,EAAC,UAAU,eAAqB;QAC9C,oBAAC,IAAI,CAAC,IAAI,IAAC,GAAG,EAAC,SAAS,cAAoB;QAC5C,oBAAC,IAAI,CAAC,IAAI,IAAC,GAAG,EAAC,MAAM,WAAiB,CAChC,CACP,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CACxB,oBAAC,KAAK,CAAC,QAAQ,QACb,QAAQ,CAAC,CAAC,CAAC,CACX,oBAAC,QAAQ,IAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD,8BAAM,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,IAAG,IAAI,CAAQ,CAChE,CACX,CAAC,CAAC,CAAC,CACH,8BAAM,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,IAAG,IAAI,CAAQ,CACtF,CACe,CACjB,CAAC,CAAC;IAEH,SAAS,OAAO,CAAC,EAAE,GAAG,EAAO;;QAC5B,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,MAAA,KAAK,CAAC,QAAQ,+CAAd,KAAK,EAAY,GAAG,EAAE;IACvB,CAAC;AACF,CAAC,CAAC;AACF,UAAU,CAAC,YAAY,GAAG;IACzB,QAAQ,EAAE,IAAI;CACd,CAAC;AACF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,20 @@
1
+ @import "~@voplus/antd/es/style/themes/default.less";
2
+ :global {
3
+ .action-type {
4
+ cursor: pointer;
5
+
6
+ .svg-inline--fa:hover {
7
+ opacity: 0.5;
8
+ // color: @primary-color !important;
9
+ }
10
+ &.readonly {
11
+ cursor: default;
12
+ }
13
+ }
14
+ .flag-menu {
15
+ .svg-inline--fa {
16
+ margin-right: 10px;
17
+ font-size: 15px;
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import "./index.less";
3
+ import { IAction } from "../../data";
4
+ declare const ScheduleActionForm: (props: {
5
+ id: string;
6
+ cancel?: (() => void) | undefined;
7
+ finish?: ((action?: IAction | undefined) => void) | undefined;
8
+ className?: string | undefined;
9
+ }) => JSX.Element;
10
+ export default ScheduleActionForm;
@@ -0,0 +1,50 @@
1
+ import "./index.less";
2
+ import { useActionStore } from "../../data";
3
+ import { Button, DatePicker, Form, Input, Select, Space } from "@voplus/antd";
4
+ import React, { useState } from "react";
5
+ import classnames from "classnames";
6
+ import moment from "moment";
7
+ const ScheduleActionForm = (props) => {
8
+ const { id, cancel, finish, className } = props;
9
+ const [form] = Form.useForm();
10
+ const [loading, setLoading] = useState(false);
11
+ const actionStore = useActionStore();
12
+ return (React.createElement("div", { className: classnames("schedule-action-form", className) },
13
+ React.createElement("h3", null, "Schedule Action"),
14
+ React.createElement(Form, { form: form, layout: "vertical", onFinish: onFinish },
15
+ React.createElement(Form.Item, { name: "ActionType", label: "Type", rules: [{ required: true }] },
16
+ React.createElement(Select, { disabled: loading },
17
+ React.createElement(Select.Option, { value: "Followup" }, "Followup"),
18
+ React.createElement(Select.Option, { value: "Meeting" }, "Meeting"),
19
+ React.createElement(Select.Option, { value: "Call" }, "Call"))),
20
+ React.createElement(Form.Item, { name: "Due", label: "Due" },
21
+ React.createElement(DatePicker, { disabled: loading })),
22
+ React.createElement(Form.Item, { name: "Note", label: "Note" },
23
+ React.createElement(Input.TextArea, { rows: 3, placeholder: "Add a Note", disabled: loading })),
24
+ React.createElement(Form.Item, { className: "schedule-action-form_btn" },
25
+ React.createElement(Space, null,
26
+ React.createElement(Button, { htmlType: "button", disabled: loading, onClick: rest }, "Cancel"),
27
+ React.createElement(Button, { type: "primary", htmlType: "submit", loading: loading }, "Schedule"))))));
28
+ /** submit Action */
29
+ async function onFinish(values) {
30
+ const { ActionType, Due, Note } = values;
31
+ setLoading(true);
32
+ const r = await actionStore.createAction({
33
+ ParentNodeId: id,
34
+ ActionType,
35
+ Due: Due ? moment(Due) : "",
36
+ Note
37
+ });
38
+ setLoading(false);
39
+ if (finish)
40
+ finish(r);
41
+ }
42
+ /** reset */
43
+ function rest() {
44
+ form.resetFields();
45
+ if (cancel)
46
+ cancel();
47
+ }
48
+ };
49
+ export default ScheduleActionForm;
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/ScheduleActionForm/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ :global {
2
+ .schedule-action-form {
3
+ max-width: 70%;
4
+ .ant-form-item {
5
+ margin-bottom: 10px;
6
+ .ant-picker,
7
+ .ant-select {
8
+ width: 100%;
9
+ }
10
+ }
11
+ .schedule-action-form_btn {
12
+ text-align: right;
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ declare const WorkCheckList: (props: {
3
+ id: string;
4
+ }) => JSX.Element;
5
+ export default WorkCheckList;
@@ -0,0 +1,38 @@
1
+ import { useWork, useWorkStore } from "../../data";
2
+ import CheckList from "@voplus/morpho-ui/es/controls/CheckList";
3
+ import React from "react";
4
+ import { useObserver } from "mobx-react-lite";
5
+ const WorkCheckList = (props) => {
6
+ const { id } = props;
7
+ const work = useWork(id);
8
+ const workStore = useWorkStore();
9
+ return useObserver(() => (React.createElement(CheckList, { list: work.checkList || [], allowAdd: true, allowChange: !work.readonly, moveAfter: moveAfter, onChange: onChange, onCreate: onCreate, onDelete: onDelete })));
10
+ /** Add a check item */
11
+ function onCreate(item) {
12
+ onSave([{ item, checked: false }, ...(work.checkList || [])]);
13
+ }
14
+ /** change check item */
15
+ function onChange(checkItem) {
16
+ const { id, item, checked } = checkItem;
17
+ const checkList = work.checkList || [];
18
+ checkList.splice(id, 1, { item, checked });
19
+ onSave(checkList);
20
+ }
21
+ /** delete check item */
22
+ function onDelete(checkItem) {
23
+ const checkList = work.checkList || [];
24
+ checkList.splice(checkItem.id, 1);
25
+ onSave(checkList);
26
+ }
27
+ /** sort checkList */
28
+ function moveAfter(id, afterId, checkList) {
29
+ onSave(checkList);
30
+ }
31
+ /** update workCheckList */
32
+ async function onSave(checkList) {
33
+ const CheckList = checkList.map(c => ({ Item: c.item, Checked: c.checked }));
34
+ await workStore.edit(id, { CheckList });
35
+ }
36
+ };
37
+ export default WorkCheckList;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/pages/Work/components/WorkCheckList/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,SAAS,MAAM,yCAAyC,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,aAAa,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC/C,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAErB,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CACxB,oBAAC,SAAS,IACT,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAC1B,QAAQ,QACR,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,CACF,CAAC,CAAC;IACH,uBAAuB;IACvB,SAAS,QAAQ,CAAC,IAAY;QAC7B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,wBAAwB;IACxB,SAAS,QAAQ,CAAC,SAAyD;QAC1E,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IACD,wBAAwB;IACxB,SAAS,QAAQ,CAAC,SAAyD;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IACD,qBAAqB;IACrB,SAAS,SAAS,CACjB,EAAU,EACV,OAAe,EACf,SAA2D;QAE3D,MAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IACD,2BAA2B;IAC3B,KAAK,UAAU,MAAM,CAAC,SAA+C;QACpE,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;AACF,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { IAction } from "../../../data";
3
+ declare const WorkActionsCard: (props: {
4
+ action?: IAction;
5
+ }) => JSX.Element;
6
+ export default WorkActionsCard;
@@ -0,0 +1,28 @@
1
+ import { useWorkContext } from "../../../data";
2
+ import React, { useState } from "react";
3
+ import { Button } from "@voplus/antd";
4
+ import Card from "@voplus/morpho-ui/es/controls/Card";
5
+ import { State } from "./state";
6
+ import { useObserver } from "mobx-react-lite";
7
+ const WorkActionsCard = (props) => {
8
+ // const { action } = props;
9
+ const [state] = useState(new State());
10
+ const context = useWorkContext();
11
+ useObserver(() => {
12
+ state.action = context.actionItem;
13
+ });
14
+ return useObserver(() => (React.createElement(Card, { bordered: true, shadow: true, className: "work-card" },
15
+ React.createElement("div", { className: "card-title" }, "Next Action"),
16
+ state.action ? (React.createElement(React.Fragment, null,
17
+ React.createElement("div", { className: "blocking-number" }, state.action.note))) : (React.createElement(Button, { type: "link", size: "large", onClick: onSchedule, style: { padding: "0" } }, "Schedule")))));
18
+ function onSchedule() {
19
+ // 查找锚点
20
+ const anchorElement = document.getElementById("ActionPlan");
21
+ // 如果对应id的锚点存在,跳转到锚点
22
+ if (anchorElement) {
23
+ anchorElement.scrollIntoView({ block: "start", behavior: "smooth" });
24
+ }
25
+ }
26
+ };
27
+ export default WorkActionsCard;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/pages/Work/components/WorkSummaryCards/WorkActionsCard/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,cAAc,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,IAAI,MAAM,oCAAoC,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IACvD,4BAA4B;IAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,WAAW,CAAC,GAAG,EAAE;QAChB,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CACxB,oBAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,QAAC,SAAS,EAAC,WAAW;QAC1C,6BAAK,SAAS,EAAC,YAAY,kBAAkB;QAC5C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACf,oBAAC,KAAK,CAAC,QAAQ;YACd,6BAAK,SAAS,EAAC,iBAAiB,IAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAO,CAE1C,CACjB,CAAC,CAAC,CAAC,CACH,oBAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,eAEpE,CACT,CACK,CACP,CAAC,CAAC;IACH,SAAS,UAAU;QAClB,OAAO;QACP,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC5D,oBAAoB;QACpB,IAAI,aAAa,EAAE;YAClB,aAAa,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;SACrE;IACF,CAAC;AACF,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { IAction } from "../../../data";
2
+ export declare class State {
3
+ action?: IAction;
4
+ }
@@ -0,0 +1,8 @@
1
+ import { __decorate } from "tslib";
2
+ import { observable } from "mobx";
3
+ export class State {
4
+ }
5
+ __decorate([
6
+ observable
7
+ ], State.prototype, "action", void 0);
8
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../../src/pages/Work/components/WorkSummaryCards/WorkActionsCard/state.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,OAAO,KAAK;CAEjB;AADY;IAAX,UAAU;qCAAyB"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ declare const WorkBlockingsCard: (props: {
3
+ onClick?: ((e: any) => void) | undefined;
4
+ }) => JSX.Element;
5
+ export default WorkBlockingsCard;
@@ -0,0 +1,11 @@
1
+ import Card from "@voplus/morpho-ui/es/controls/Card";
2
+ import React from "react";
3
+ import { useObserver } from "mobx-react-lite";
4
+ const WorkBlockingsCard = (props) => {
5
+ return useObserver(() => (React.createElement(Card, { bordered: true, shadow: true, className: "work-card" },
6
+ React.createElement("div", { style: { height: "100%" }, onClick: props.onClick },
7
+ React.createElement("div", { className: "card-title" }, "Blocking Work"),
8
+ React.createElement("div", { className: "blocking-number" }, "2")))));
9
+ };
10
+ export default WorkBlockingsCard;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/pages/Work/components/WorkSummaryCards/WorkBlockingsCard/index.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,oCAAoC,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,CAAC,KAAqC,EAAE,EAAE;IACnE,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CACxB,oBAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,QAAC,SAAS,EAAC,WAAW;QAC1C,6BAAK,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;YACrD,6BAAK,SAAS,EAAC,YAAY,oBAAoB;YAC/C,6BAAK,SAAS,EAAC,iBAAiB,QAAQ,CACnC,CACA,CACP,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ declare const WorkDueCard: (props: {
3
+ id?: string;
4
+ }) => JSX.Element;
5
+ export default WorkDueCard;