@pisell/private-materials 6.3.89 → 6.3.90

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 (94) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +1 -1
  6. package/build/lowcode/preview.js +7 -7
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +10 -10
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +10 -10
  11. package/es/components/appointmentBooking/components/TimeSlicing/components/SelectDateOS.d.ts +1 -0
  12. package/es/components/booking/info/date/index.d.ts +0 -1
  13. package/es/components/ecocup/components/CupInfoCard/index.d.ts +1 -0
  14. package/es/components/ecocup/components/CustomerCard/index.d.ts +1 -0
  15. package/es/components/eftposPay/windcave/windcave.d.ts +1 -0
  16. package/es/index.d.ts +1 -0
  17. package/es/index.js +1 -0
  18. package/es/plus/saasAttendance/index.d.ts +6 -0
  19. package/es/plus/saasAttendance/index.js +5 -0
  20. package/es/plus/saasAttendance/locales.d.ts +318 -0
  21. package/es/plus/saasAttendance/locales.js +354 -0
  22. package/es/plus/saasAttendance/settings/BasicInfoTab.d.ts +5 -0
  23. package/es/plus/saasAttendance/settings/BasicInfoTab.js +96 -0
  24. package/es/plus/saasAttendance/settings/ClockInMethodTab.d.ts +8 -0
  25. package/es/plus/saasAttendance/settings/ClockInMethodTab.js +81 -0
  26. package/es/plus/saasAttendance/settings/CorrectionPolicyTab.d.ts +8 -0
  27. package/es/plus/saasAttendance/settings/CorrectionPolicyTab.js +293 -0
  28. package/es/plus/saasAttendance/settings/ShiftScheduleTab.d.ts +5 -0
  29. package/es/plus/saasAttendance/settings/ShiftScheduleTab.js +109 -0
  30. package/es/plus/saasAttendance/settings/components/MapField.d.ts +78 -0
  31. package/es/plus/saasAttendance/settings/components/MapField.js +810 -0
  32. package/es/plus/saasAttendance/settings/components/index.d.ts +3 -0
  33. package/es/plus/saasAttendance/settings/components/index.js +2 -0
  34. package/es/plus/saasAttendance/settings/components/membersField/index.d.ts +7 -0
  35. package/es/plus/saasAttendance/settings/components/membersField/index.js +216 -0
  36. package/es/plus/saasAttendance/settings/components/membersField/index.less +70 -0
  37. package/es/plus/saasAttendance/settings/components/shiftModal/index.d.ts +18 -0
  38. package/es/plus/saasAttendance/settings/components/shiftModal/index.js +438 -0
  39. package/es/plus/saasAttendance/settings/index.d.ts +18 -0
  40. package/es/plus/saasAttendance/settings/index.js +255 -0
  41. package/es/plus/saasAttendance/settings/index.less +495 -0
  42. package/es/plus/saasAttendance/settings/serve.d.ts +27 -0
  43. package/es/plus/saasAttendance/settings/serve.js +83 -0
  44. package/es/plus/saasAttendance/settings/types.d.ts +128 -0
  45. package/es/plus/saasAttendance/settings/types.js +1 -0
  46. package/es/plus/selectHolder/locales.d.ts +6 -0
  47. package/es/plus/selectHolder/locales.js +6 -0
  48. package/es/plus/skuOptionsSelection/components/TitleExtra/index.d.ts +1 -0
  49. package/es/plus/skuOptionsSelection/components/VariantCard/index.d.ts +1 -0
  50. package/es/pro/Selector/demo.d.ts +1 -0
  51. package/lib/components/appointmentBooking/components/TimeSlicing/components/SelectDateOS.d.ts +1 -0
  52. package/lib/components/booking/info/date/index.d.ts +0 -1
  53. package/lib/components/ecocup/components/CupInfoCard/index.d.ts +1 -0
  54. package/lib/components/ecocup/components/CustomerCard/index.d.ts +1 -0
  55. package/lib/components/eftposPay/windcave/windcave.d.ts +1 -0
  56. package/lib/index.d.ts +1 -0
  57. package/lib/index.js +3 -0
  58. package/lib/plus/saasAttendance/index.d.ts +6 -0
  59. package/lib/plus/saasAttendance/index.js +39 -0
  60. package/lib/plus/saasAttendance/locales.d.ts +318 -0
  61. package/lib/plus/saasAttendance/locales.js +342 -0
  62. package/lib/plus/saasAttendance/settings/BasicInfoTab.d.ts +5 -0
  63. package/lib/plus/saasAttendance/settings/BasicInfoTab.js +152 -0
  64. package/lib/plus/saasAttendance/settings/ClockInMethodTab.d.ts +8 -0
  65. package/lib/plus/saasAttendance/settings/ClockInMethodTab.js +88 -0
  66. package/lib/plus/saasAttendance/settings/CorrectionPolicyTab.d.ts +8 -0
  67. package/lib/plus/saasAttendance/settings/CorrectionPolicyTab.js +369 -0
  68. package/lib/plus/saasAttendance/settings/ShiftScheduleTab.d.ts +5 -0
  69. package/lib/plus/saasAttendance/settings/ShiftScheduleTab.js +106 -0
  70. package/lib/plus/saasAttendance/settings/components/MapField.d.ts +78 -0
  71. package/lib/plus/saasAttendance/settings/components/MapField.js +631 -0
  72. package/lib/plus/saasAttendance/settings/components/index.d.ts +3 -0
  73. package/lib/plus/saasAttendance/settings/components/index.js +42 -0
  74. package/lib/plus/saasAttendance/settings/components/membersField/index.d.ts +7 -0
  75. package/lib/plus/saasAttendance/settings/components/membersField/index.js +247 -0
  76. package/lib/plus/saasAttendance/settings/components/membersField/index.less +70 -0
  77. package/lib/plus/saasAttendance/settings/components/shiftModal/index.d.ts +18 -0
  78. package/lib/plus/saasAttendance/settings/components/shiftModal/index.js +447 -0
  79. package/lib/plus/saasAttendance/settings/index.d.ts +18 -0
  80. package/lib/plus/saasAttendance/settings/index.js +283 -0
  81. package/lib/plus/saasAttendance/settings/index.less +495 -0
  82. package/lib/plus/saasAttendance/settings/serve.d.ts +27 -0
  83. package/lib/plus/saasAttendance/settings/serve.js +54 -0
  84. package/lib/plus/saasAttendance/settings/types.d.ts +128 -0
  85. package/lib/plus/saasAttendance/settings/types.js +17 -0
  86. package/lib/plus/selectHolder/locales.d.ts +6 -0
  87. package/lib/plus/selectHolder/locales.js +6 -0
  88. package/lib/plus/skuOptionsSelection/components/TitleExtra/index.d.ts +1 -0
  89. package/lib/plus/skuOptionsSelection/components/VariantCard/index.d.ts +1 -0
  90. package/lib/pro/Selector/demo.d.ts +1 -0
  91. package/lowcode/eco-cup-list/meta.ts +1 -1
  92. package/lowcode/eco-customer-list/meta.ts +1 -1
  93. package/lowcode/saas-attendance-settings/meta.ts +56 -0
  94. package/package.json +3 -3
@@ -0,0 +1,438 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _excluded = ["startSort"];
3
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
5
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
6
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
7
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
8
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
13
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
+ import React, { useEffect, useMemo } from 'react';
15
+ import { Button, Checkbox, Col, Form, Input, Row, Space, TimePicker } from 'antd';
16
+ import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
17
+ import { PisellModal } from '@pisell/materials';
18
+ import { locales } from '@pisell/utils';
19
+ import dayjs from 'dayjs';
20
+ var WEEKDAYS = [1, 2, 3, 4, 5, 6, 7];
21
+ var AntRow = Row;
22
+ var AntCol = Col;
23
+ var AntSpace = Space;
24
+ var generateUUID = function generateUUID() {
25
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
26
+ var r = Math.random() * 16 | 0;
27
+ var v = c === 'x' ? r : r & 0x3 | 0x8;
28
+ return v.toString(16);
29
+ });
30
+ };
31
+ var pad2 = function pad2(val) {
32
+ return String(val).padStart(2, '0');
33
+ };
34
+ var createTime = function createTime(hour, minute) {
35
+ return dayjs().hour(hour).minute(minute).second(0).millisecond(0);
36
+ };
37
+ var toMinutes = function toMinutes(val) {
38
+ return val.hour() * 60 + val.minute();
39
+ };
40
+ var parseHHmm = function parseHHmm(hhmm) {
41
+ var _split$map = (hhmm || '').split(':').map(function (v) {
42
+ return Number(v);
43
+ }),
44
+ _split$map2 = _slicedToArray(_split$map, 2),
45
+ h = _split$map2[0],
46
+ m = _split$map2[1];
47
+ if (!Number.isFinite(h) || !Number.isFinite(m)) {
48
+ return null;
49
+ }
50
+ return createTime(h, m);
51
+ };
52
+ var formatHHmm = function formatHHmm(val) {
53
+ return "".concat(pad2(val.hour()), ":").concat(pad2(val.minute()));
54
+ };
55
+ var buildInitialDays = function buildInitialDays(value) {
56
+ var byWeekday = new Map();
57
+ if (Array.isArray(value)) {
58
+ value.forEach(function (item) {
59
+ if (item && typeof item.weekday === 'number') {
60
+ byWeekday.set(item.weekday, item);
61
+ }
62
+ });
63
+ }
64
+ return WEEKDAYS.map(function (weekday) {
65
+ var src = byWeekday.get(weekday);
66
+ var times = Array.isArray(src === null || src === void 0 ? void 0 : src.times) ? src.times : [];
67
+ return {
68
+ weekday: weekday,
69
+ enabled: times.length > 0,
70
+ times: times.map(function (t) {
71
+ return {
72
+ id: (t === null || t === void 0 ? void 0 : t.id) || generateUUID(),
73
+ start: t !== null && t !== void 0 && t.start ? parseHHmm(t.start) : null,
74
+ end: t !== null && t !== void 0 && t.end ? parseHHmm(t.end) : null
75
+ };
76
+ })
77
+ };
78
+ });
79
+ };
80
+ var getWeekdayText = function getWeekdayText(weekday) {
81
+ return locales.getText("pisell2.attendance.group-settings.shift-schedule.modal.weekday.".concat(weekday));
82
+ };
83
+ var ShiftModal = function ShiftModal(props) {
84
+ var _Form$useForm = Form.useForm(),
85
+ _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
86
+ form = _Form$useForm2[0];
87
+ useEffect(function () {
88
+ if (!props.open) return;
89
+ form.setFieldsValue({
90
+ days: buildInitialDays(props.value)
91
+ });
92
+ }, [form, props.open, props.value]);
93
+ var isTimeOverlapping = function isTimeOverlapping(dayIndex, timeIndex) {
94
+ var times = form.getFieldValue(['days', dayIndex, 'times']) || [];
95
+ var cur = times === null || times === void 0 ? void 0 : times[timeIndex];
96
+ if (!(cur !== null && cur !== void 0 && cur.start) || !(cur !== null && cur !== void 0 && cur.end)) return false;
97
+ var curStart = toMinutes(cur.start);
98
+ var curEnd = toMinutes(cur.end);
99
+ if (curStart >= curEnd) return false;
100
+ for (var i = 0; i < times.length; i += 1) {
101
+ if (i === timeIndex) continue;
102
+ var other = times[i];
103
+ if (!(other !== null && other !== void 0 && other.start) || !(other !== null && other !== void 0 && other.end)) continue;
104
+ var oStart = toMinutes(other.start);
105
+ var oEnd = toMinutes(other.end);
106
+ if (oStart >= oEnd) continue;
107
+ var overlapped = curStart <= oEnd && oStart <= curEnd;
108
+ if (overlapped) return true;
109
+ }
110
+ return false;
111
+ };
112
+ var triggerDayValidation = function triggerDayValidation(dayIndex) {
113
+ var times = form.getFieldValue(['days', dayIndex, 'times']) || [];
114
+ var fields = [];
115
+ times.forEach(function (t, idx) {
116
+ if (t !== null && t !== void 0 && t.start) fields.push(['days', dayIndex, 'times', idx, 'start']);
117
+ if (t !== null && t !== void 0 && t.end) fields.push(['days', dayIndex, 'times', idx, 'end']);
118
+ });
119
+ if (!fields.length) return;
120
+ form.validateFields(fields).catch(function () {});
121
+ };
122
+ var toScheduleValue = function toScheduleValue(days) {
123
+ var byWeekday = new Map();
124
+ days.forEach(function (d) {
125
+ if (d && typeof d.weekday === 'number') {
126
+ byWeekday.set(d.weekday, d);
127
+ }
128
+ });
129
+ return WEEKDAYS.map(function (weekday) {
130
+ var day = byWeekday.get(weekday);
131
+ if (!(day !== null && day !== void 0 && day.enabled)) {
132
+ return {
133
+ weekday: weekday,
134
+ times: []
135
+ };
136
+ }
137
+ var times = Array.isArray(day.times) ? day.times : [];
138
+ var normalized = times.filter(function (t) {
139
+ return (t === null || t === void 0 ? void 0 : t.start) && (t === null || t === void 0 ? void 0 : t.end);
140
+ }).map(function (t) {
141
+ return {
142
+ id: t.id || generateUUID(),
143
+ start: formatHHmm(t.start),
144
+ end: formatHHmm(t.end),
145
+ startSort: toMinutes(t.start)
146
+ };
147
+ }).sort(function (a, b) {
148
+ return a.startSort - b.startSort;
149
+ }).map(function (_ref) {
150
+ var _startSort = _ref.startSort,
151
+ rest = _objectWithoutProperties(_ref, _excluded);
152
+ return rest;
153
+ });
154
+ return {
155
+ weekday: weekday,
156
+ times: normalized
157
+ };
158
+ });
159
+ };
160
+ var handleConfirm = /*#__PURE__*/function () {
161
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
162
+ var _values;
163
+ var values, days;
164
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
165
+ while (1) switch (_context.prev = _context.next) {
166
+ case 0:
167
+ _context.prev = 0;
168
+ _context.next = 3;
169
+ return form.validateFields();
170
+ case 3:
171
+ values = _context.sent;
172
+ _context.next = 9;
173
+ break;
174
+ case 6:
175
+ _context.prev = 6;
176
+ _context.t0 = _context["catch"](0);
177
+ return _context.abrupt("return");
178
+ case 9:
179
+ days = Array.isArray((_values = values) === null || _values === void 0 ? void 0 : _values.days) ? values.days : [];
180
+ props.onOk(toScheduleValue(days));
181
+ props.onCancel();
182
+ case 12:
183
+ case "end":
184
+ return _context.stop();
185
+ }
186
+ }, _callee, null, [[0, 6]]);
187
+ }));
188
+ return function handleConfirm() {
189
+ return _ref2.apply(this, arguments);
190
+ };
191
+ }();
192
+ var footer = useMemo(function () {
193
+ return /*#__PURE__*/React.createElement(AntSpace, {
194
+ style: {
195
+ width: '100%',
196
+ justifyContent: 'flex-end'
197
+ }
198
+ }, /*#__PURE__*/React.createElement(Button, {
199
+ onClick: props.onCancel
200
+ }, locales.getText('pisell2.attendance.group-settings.actions.cancel')), /*#__PURE__*/React.createElement(Button, {
201
+ type: "primary",
202
+ onClick: handleConfirm
203
+ }, locales.getText('pisell2.attendance.group-settings.actions.confirm')));
204
+ }, [handleConfirm, props.onCancel]);
205
+ return /*#__PURE__*/React.createElement(PisellModal, {
206
+ open: props.open,
207
+ onCancel: props.onCancel,
208
+ title: locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.title'),
209
+ width: 720,
210
+ bodyStyle: {
211
+ padding: 20
212
+ },
213
+ footer: footer,
214
+ destroyOnClose: true
215
+ }, /*#__PURE__*/React.createElement(Form, {
216
+ form: form,
217
+ layout: "vertical"
218
+ }, /*#__PURE__*/React.createElement(Form.List, {
219
+ name: "days"
220
+ }, function (dayFields) {
221
+ return /*#__PURE__*/React.createElement("div", null, dayFields.map(function (dayField, dayIndex) {
222
+ return /*#__PURE__*/React.createElement("div", {
223
+ key: dayField.key,
224
+ style: {
225
+ padding: '12px 0'
226
+ }
227
+ }, /*#__PURE__*/React.createElement(AntRow, {
228
+ gutter: 12,
229
+ align: "top"
230
+ }, /*#__PURE__*/React.createElement(AntCol, {
231
+ flex: "180px"
232
+ }, /*#__PURE__*/React.createElement(Form.Item, {
233
+ name: [dayField.name, 'enabled'],
234
+ valuePropName: "checked",
235
+ style: {
236
+ marginBottom: 0
237
+ }
238
+ }, /*#__PURE__*/React.createElement(Checkbox, {
239
+ onChange: function onChange(e) {
240
+ var checked = e.target.checked;
241
+ var timesPath = ['days', dayIndex, 'times'];
242
+ if (checked) {
243
+ var current = form.getFieldValue(timesPath) || [];
244
+ if (!current.length) {
245
+ form.setFieldValue(timesPath, [{
246
+ id: generateUUID(),
247
+ start: null,
248
+ end: null
249
+ }]);
250
+ }
251
+ } else {
252
+ form.setFieldValue(timesPath, []);
253
+ }
254
+ }
255
+ }, getWeekdayText(dayIndex + 1))), /*#__PURE__*/React.createElement(Form.Item, {
256
+ name: [dayField.name, 'weekday'],
257
+ hidden: true
258
+ }, /*#__PURE__*/React.createElement(Input, null))), /*#__PURE__*/React.createElement(AntCol, {
259
+ flex: "auto"
260
+ }, /*#__PURE__*/React.createElement(Form.Item, {
261
+ noStyle: true,
262
+ shouldUpdate: function shouldUpdate(prev, cur) {
263
+ var _prev$days, _cur$days, _prev$days2, _cur$days2;
264
+ return (prev === null || prev === void 0 || (_prev$days = prev.days) === null || _prev$days === void 0 || (_prev$days = _prev$days[dayIndex]) === null || _prev$days === void 0 ? void 0 : _prev$days.enabled) !== (cur === null || cur === void 0 || (_cur$days = cur.days) === null || _cur$days === void 0 || (_cur$days = _cur$days[dayIndex]) === null || _cur$days === void 0 ? void 0 : _cur$days.enabled) || (prev === null || prev === void 0 || (_prev$days2 = prev.days) === null || _prev$days2 === void 0 || (_prev$days2 = _prev$days2[dayIndex]) === null || _prev$days2 === void 0 ? void 0 : _prev$days2.times) !== (cur === null || cur === void 0 || (_cur$days2 = cur.days) === null || _cur$days2 === void 0 || (_cur$days2 = _cur$days2[dayIndex]) === null || _cur$days2 === void 0 ? void 0 : _cur$days2.times);
265
+ }
266
+ }, function () {
267
+ var enabled = form.getFieldValue(['days', dayIndex, 'enabled']);
268
+ if (!enabled) {
269
+ return /*#__PURE__*/React.createElement("div", {
270
+ style: {
271
+ lineHeight: '40px',
272
+ color: '#6b7280'
273
+ }
274
+ }, locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.no-shift'));
275
+ }
276
+ return /*#__PURE__*/React.createElement(Form.List, {
277
+ name: [dayField.name, 'times']
278
+ }, function (timeFields, _ref3) {
279
+ var add = _ref3.add,
280
+ remove = _ref3.remove;
281
+ return /*#__PURE__*/React.createElement("div", null, timeFields.map(function (timeField, timeIndex) {
282
+ return /*#__PURE__*/React.createElement(AntRow, {
283
+ key: timeField.key,
284
+ gutter: 8,
285
+ style: {
286
+ marginBottom: 8
287
+ }
288
+ }, /*#__PURE__*/React.createElement(AntCol, {
289
+ flex: "1 1 220px"
290
+ }, /*#__PURE__*/React.createElement(Form.Item, {
291
+ name: [timeField.name, 'id'],
292
+ hidden: true
293
+ }, /*#__PURE__*/React.createElement(Input, null)), /*#__PURE__*/React.createElement(Form.Item, {
294
+ label: timeIndex === 0 ? locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.start') : undefined,
295
+ name: [timeField.name, 'start'],
296
+ rules: [{
297
+ validator: function () {
298
+ var _validator = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_rule, value) {
299
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
300
+ while (1) switch (_context2.prev = _context2.next) {
301
+ case 0:
302
+ if (value) {
303
+ _context2.next = 2;
304
+ break;
305
+ }
306
+ throw new Error(locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.validation.start-required'));
307
+ case 2:
308
+ if (!isTimeOverlapping(dayIndex, timeField.name)) {
309
+ _context2.next = 4;
310
+ break;
311
+ }
312
+ throw new Error(locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.validation.overlap'));
313
+ case 4:
314
+ case "end":
315
+ return _context2.stop();
316
+ }
317
+ }, _callee2);
318
+ }));
319
+ function validator(_x, _x2) {
320
+ return _validator.apply(this, arguments);
321
+ }
322
+ return validator;
323
+ }()
324
+ }]
325
+ }, /*#__PURE__*/React.createElement(TimePicker, {
326
+ use12Hours: true,
327
+ format: "h:mm A",
328
+ style: {
329
+ width: '100%'
330
+ },
331
+ onChange: function onChange() {
332
+ triggerDayValidation(dayIndex);
333
+ form.validateFields([['days', dayIndex, 'times', timeField.name, 'end']]).catch(function () {});
334
+ }
335
+ }))), /*#__PURE__*/React.createElement(AntCol, {
336
+ flex: "1 1 220px"
337
+ }, /*#__PURE__*/React.createElement(Form.Item, {
338
+ label: timeIndex === 0 ? locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.end') : undefined,
339
+ name: [timeField.name, 'end'],
340
+ rules: [{
341
+ validator: function () {
342
+ var _validator2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_rule, value) {
343
+ var startValue;
344
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
345
+ while (1) switch (_context3.prev = _context3.next) {
346
+ case 0:
347
+ if (value) {
348
+ _context3.next = 2;
349
+ break;
350
+ }
351
+ throw new Error(locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.validation.end-required'));
352
+ case 2:
353
+ startValue = form.getFieldValue(['days', dayIndex, 'times', timeField.name, 'start']) || null;
354
+ if (!(startValue && toMinutes(startValue) >= toMinutes(value))) {
355
+ _context3.next = 5;
356
+ break;
357
+ }
358
+ throw new Error(locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.validation.range'));
359
+ case 5:
360
+ case "end":
361
+ return _context3.stop();
362
+ }
363
+ }, _callee3);
364
+ }));
365
+ function validator(_x3, _x4) {
366
+ return _validator2.apply(this, arguments);
367
+ }
368
+ return validator;
369
+ }()
370
+ }]
371
+ }, /*#__PURE__*/React.createElement(TimePicker, {
372
+ use12Hours: true,
373
+ format: "h:mm A",
374
+ style: {
375
+ width: '100%'
376
+ },
377
+ onChange: function onChange() {
378
+ triggerDayValidation(dayIndex);
379
+ }
380
+ }))), /*#__PURE__*/React.createElement(AntCol, {
381
+ flex: "0 0 40px"
382
+ }, timeIndex === 0 ? /*#__PURE__*/React.createElement("div", {
383
+ style: {
384
+ height: 48
385
+ }
386
+ }) : null, /*#__PURE__*/React.createElement(Button, {
387
+ icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
388
+ onClick: function onClick() {
389
+ remove(timeField.name);
390
+ triggerDayValidation(dayIndex);
391
+ var left = form.getFieldValue(['days', dayIndex, 'times']) || [];
392
+ if (!left.length) {
393
+ form.setFieldValue(['days', dayIndex, 'enabled'], false);
394
+ }
395
+ }
396
+ })));
397
+ }), /*#__PURE__*/React.createElement(Button, {
398
+ icon: /*#__PURE__*/React.createElement(PlusOutlined, null),
399
+ onClick: function onClick() {
400
+ var times = form.getFieldValue(['days', dayIndex, 'times']) || [];
401
+ var last = times[times.length - 1];
402
+ if (!(last !== null && last !== void 0 && last.start) || !(last !== null && last !== void 0 && last.end)) {
403
+ add({
404
+ id: generateUUID(),
405
+ start: null,
406
+ end: null
407
+ });
408
+ triggerDayValidation(dayIndex);
409
+ return;
410
+ }
411
+ var lastEnd = last.end;
412
+ var endDateText = lastEnd.format('YYYY-MM-DD');
413
+ var nextStart = lastEnd.add(1, 'hour');
414
+ var nextEnd = lastEnd.add(2, 'hour');
415
+ var crossed = nextEnd.format('YYYY-MM-DD') !== endDateText || nextStart.format('YYYY-MM-DD') !== endDateText;
416
+ if (crossed) {
417
+ add({
418
+ id: generateUUID(),
419
+ start: createTime(23, 0),
420
+ end: createTime(23, 55)
421
+ });
422
+ triggerDayValidation(dayIndex);
423
+ return;
424
+ }
425
+ add({
426
+ id: generateUUID(),
427
+ start: nextStart,
428
+ end: nextEnd
429
+ });
430
+ triggerDayValidation(dayIndex);
431
+ }
432
+ }, locales.getText('pisell2.attendance.group-settings.shift-schedule.modal.add-time')));
433
+ });
434
+ }))));
435
+ }));
436
+ })));
437
+ };
438
+ export default ShiftModal;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import type { AttendanceGroupSettingsValue, TenantAccount } from './types';
3
+ import './index.less';
4
+ export interface ISettingsProps {
5
+ value?: AttendanceGroupSettingsValue;
6
+ onValuesChange?: (value: AttendanceGroupSettingsValue) => void;
7
+ onFinish?: (value: AttendanceGroupSettingsValue) => void;
8
+ loading?: boolean;
9
+ className?: string;
10
+ style?: React.CSSProperties;
11
+ /** 自定义滚动容器,可以是选择器字符串或 HTMLElement */
12
+ customScrollParent?: string | HTMLElement;
13
+ }
14
+ export declare const settingsContext: React.Context<{
15
+ members: TenantAccount[];
16
+ }>;
17
+ declare const Settings: React.FC<ISettingsProps>;
18
+ export default Settings;