@leankylin-sheet/react 6.0.0 → 6.0.1

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.
package/dist/index.umd.js CHANGED
@@ -21347,7 +21347,7 @@
21347
21347
  c = _ref.c,
21348
21348
  rc = _ref.rc,
21349
21349
  originText = _ref.originText,
21350
- originType = _ref.originType,
21350
+ _originType = _ref.originType,
21351
21351
  originAddress = _ref.originAddress,
21352
21352
  isEditing = _ref.isEditing,
21353
21353
  position = _ref.position,
@@ -21355,7 +21355,8 @@
21355
21355
  var _useContext = React.useContext(WorkbookContext),
21356
21356
  context = _useContext.context,
21357
21357
  setContext = _useContext.setContext,
21358
- refs = _useContext.refs;
21358
+ refs = _useContext.refs,
21359
+ settings = _useContext.settings;
21359
21360
  var _useState = React.useState(originText),
21360
21361
  _useState2 = _slicedToArray(_useState, 2),
21361
21362
  linkText = _useState2[0],
@@ -21364,10 +21365,19 @@
21364
21365
  _useState4 = _slicedToArray(_useState3, 2),
21365
21366
  linkAddress = _useState4[0],
21366
21367
  setLinkAddress = _useState4[1];
21368
+ var originType = _originType || settings.detailLinkType || "webpage";
21367
21369
  var _useState5 = React.useState(originType),
21368
21370
  _useState6 = _slicedToArray(_useState5, 2),
21369
21371
  linkType = _useState6[0],
21370
21372
  setLinkType = _useState6[1];
21373
+ var _useState7 = React.useState(function () {
21374
+ var _origin$payload;
21375
+ var origin = core.getCellHyperlink(context, r, c);
21376
+ return (_origin$payload = origin === null || origin === void 0 ? void 0 : origin.payload) !== null && _origin$payload !== void 0 ? _origin$payload : {};
21377
+ }),
21378
+ _useState8 = _slicedToArray(_useState7, 2),
21379
+ customPayload = _useState8[0],
21380
+ setCustomPayload = _useState8[1];
21371
21381
  var _locale = core.locale(context),
21372
21382
  insertLink = _locale.insertLink,
21373
21383
  linkTypeList = _locale.linkTypeList,
@@ -21378,9 +21388,65 @@
21378
21388
  }]));
21379
21389
  var skipCellRangeSet = React.useRef(true);
21380
21390
  var isLinkAddressValid = core.isLinkValid(context, linkType, linkAddress);
21381
- var tooltip = /*#__PURE__*/React__default['default'].createElement("div", {
21382
- className: "validation-input-tip"
21383
- }, isLinkAddressValid.tooltip);
21391
+ var mergedLinkTypeList = React.useMemo(function () {
21392
+ var _settings$customLinkT;
21393
+ var customs = (_settings$customLinkT = settings === null || settings === void 0 ? void 0 : settings.customLinkTypes) !== null && _settings$customLinkT !== void 0 ? _settings$customLinkT : [];
21394
+ if (customs.length === 0) return linkTypeList;
21395
+ var builtinTypes = new Set(linkTypeList.map(function (it) {
21396
+ return it.value;
21397
+ }));
21398
+ var extra = customs.filter(function (it) {
21399
+ return it.type && !builtinTypes.has(it.type);
21400
+ }).map(function (it) {
21401
+ return {
21402
+ text: it.text,
21403
+ value: it.type
21404
+ };
21405
+ });
21406
+ return [].concat(_toConsumableArray(extra), _toConsumableArray(linkTypeList));
21407
+ }, [settings === null || settings === void 0 ? void 0 : settings.customLinkTypes, linkTypeList]);
21408
+ var customLinkTypeMap = React.useMemo(function () {
21409
+ var _settings$customLinkT2;
21410
+ var m = {};
21411
+ ((_settings$customLinkT2 = settings === null || settings === void 0 ? void 0 : settings.customLinkTypes) !== null && _settings$customLinkT2 !== void 0 ? _settings$customLinkT2 : []).forEach(function (it) {
21412
+ if (it.type) m[it.type] = it;
21413
+ });
21414
+ return m;
21415
+ }, [settings === null || settings === void 0 ? void 0 : settings.customLinkTypes]);
21416
+ var currentCustomConfig = customLinkTypeMap[linkType];
21417
+ var isCustomTypeValid = React.useMemo(function () {
21418
+ if (!currentCustomConfig) return true;
21419
+ if (!currentCustomConfig.onSave) return true;
21420
+ var next = currentCustomConfig.onSave({
21421
+ linkText: linkText,
21422
+ linkAddress: linkAddress,
21423
+ position: {
21424
+ r: r,
21425
+ c: c
21426
+ },
21427
+ origin: function () {
21428
+ var o = core.getCellHyperlink(context, r, c);
21429
+ return o ? {
21430
+ linkType: o.linkType,
21431
+ linkAddress: o.linkAddress,
21432
+ payload: o.payload
21433
+ } : undefined;
21434
+ }()
21435
+ });
21436
+ return next !== undefined;
21437
+ }, [currentCustomConfig, linkText, linkAddress, r, c, context]);
21438
+ var canSubmit = !currentCustomConfig || isCustomTypeValid ? isLinkAddressValid.isValid : false;
21439
+ var tooltip = function () {
21440
+ var text;
21441
+ if (currentCustomConfig) {
21442
+ text = isCustomTypeValid ? "" : insertLink.tooltipInfo1 || "";
21443
+ } else {
21444
+ text = isLinkAddressValid.tooltip;
21445
+ }
21446
+ return /*#__PURE__*/React__default['default'].createElement("div", {
21447
+ className: "validation-input-tip"
21448
+ }, text);
21449
+ }();
21384
21450
  var hideLinkCard = React.useCallback(function () {
21385
21451
  lodash.set(refs.globalCache, "linkCard.mouseEnter", false);
21386
21452
  setContext(function (draftCtx) {
@@ -21442,10 +21508,13 @@
21442
21508
  }));
21443
21509
  }, []);
21444
21510
  React.useLayoutEffect(function () {
21511
+ var _origin$payload2;
21445
21512
  setLinkAddress(originAddress);
21446
21513
  setLinkText(originText);
21447
21514
  setLinkType(originType);
21448
- }, [rc, originAddress, originText, originType]);
21515
+ var origin = core.getCellHyperlink(context, r, c);
21516
+ setCustomPayload((_origin$payload2 = origin === null || origin === void 0 ? void 0 : origin.payload) !== null && _origin$payload2 !== void 0 ? _origin$payload2 : {});
21517
+ }, [rc, originAddress, originText, originType, r, c, context]);
21449
21518
  React.useLayoutEffect(function () {
21450
21519
  if (selectingCellRange) {
21451
21520
  skipCellRangeSet.current = true;
@@ -21464,6 +21533,7 @@
21464
21533
  }
21465
21534
  }, [context, selectingCellRange]);
21466
21535
  if (!isEditing) {
21536
+ var toolbarCustomConfig = customLinkTypeMap[originType];
21467
21537
  return /*#__PURE__*/React__default['default'].createElement("div", _objectSpread2(_objectSpread2({}, containerEvent), {}, {
21468
21538
  onKeyDown: function onKeyDown(e) {
21469
21539
  e.stopPropagation();
@@ -21475,16 +21545,35 @@
21475
21545
  }
21476
21546
  }), /*#__PURE__*/React__default['default'].createElement("div", {
21477
21547
  className: "link-content",
21478
- onClick: function onClick() {
21548
+ onClick: function onClick(reactEvent) {
21549
+ var _getCellHyperlink, _toolbarCustomConfig$, _settings$hooks, _settings$hooks$onHyp;
21550
+ var payload = (_getCellHyperlink = core.getCellHyperlink(context, r, c)) === null || _getCellHyperlink === void 0 ? void 0 : _getCellHyperlink.payload;
21551
+ var clickInfo = {
21552
+ linkType: originType,
21553
+ linkAddress: originAddress,
21554
+ payload: payload,
21555
+ position: {
21556
+ r: r,
21557
+ c: c,
21558
+ sheetId: context.currentSheetId
21559
+ },
21560
+ event: reactEvent
21561
+ };
21562
+ var userResult = toolbarCustomConfig === null || toolbarCustomConfig === void 0 ? void 0 : (_toolbarCustomConfig$ = toolbarCustomConfig.onClick) === null || _toolbarCustomConfig$ === void 0 ? void 0 : _toolbarCustomConfig$.call(toolbarCustomConfig, clickInfo);
21563
+ settings === null || settings === void 0 ? void 0 : (_settings$hooks = settings.hooks) === null || _settings$hooks === void 0 ? void 0 : (_settings$hooks$onHyp = _settings$hooks.onHyperlinkClick) === null || _settings$hooks$onHyp === void 0 ? void 0 : _settings$hooks$onHyp.call(_settings$hooks, clickInfo);
21564
+ if (userResult === false) {
21565
+ hideLinkCard();
21566
+ return;
21567
+ }
21479
21568
  setContext(function (draftCtx) {
21480
- return core.goToLink(draftCtx, r, c, linkType, linkAddress, refs.scrollbarX.current, refs.scrollbarY.current);
21569
+ return core.goToLink(draftCtx, r, c, originType, originAddress, refs.scrollbarX.current, refs.scrollbarY.current);
21481
21570
  });
21482
21571
  }
21483
- }, linkType === "webpage" ? insertLink.openLink : core.replaceHtml(insertLink.goTo, {
21484
- linkAddress: linkAddress
21572
+ }, originType === "webpage" ? insertLink.openLink : core.replaceHtml(insertLink.goTo, {
21573
+ linkAddress: originAddress
21485
21574
  })), context.allowEdit === true && /*#__PURE__*/React__default['default'].createElement("div", {
21486
21575
  className: "divider"
21487
- }), context.allowEdit === true && linkType === "webpage" && renderToolbarButton("copy", function () {
21576
+ }), context.allowEdit === true && originType === "webpage" && renderToolbarButton("copy", function () {
21488
21577
  navigator.clipboard.writeText(originAddress);
21489
21578
  hideLinkCard();
21490
21579
  }), context.allowEdit === true && renderToolbarButton("pencil", function () {
@@ -21563,18 +21652,23 @@
21563
21652
  className: "leankylin-link-modify-select",
21564
21653
  value: linkType,
21565
21654
  onChange: function onChange(e) {
21566
- if (e.target.value === "sheet") {
21655
+ var next = e.target.value;
21656
+ var nextCustomConfig = customLinkTypeMap[next];
21657
+ if (next === "sheet") {
21567
21658
  if (!linkText) {
21568
21659
  setLinkText(context.luckysheetfile[0].name);
21569
21660
  }
21570
21661
  setLinkAddress(context.luckysheetfile[0].name);
21662
+ } else if (nextCustomConfig) {
21663
+ setLinkAddress("");
21664
+ setCustomPayload({});
21571
21665
  } else {
21572
21666
  setLinkAddress("");
21573
21667
  }
21574
- if (e.target.value === "cellrange") setRangeModalVisible(true);
21575
- setLinkType(e.target.value);
21668
+ if (next === "cellrange") setRangeModalVisible(true);
21669
+ setLinkType(next);
21576
21670
  }
21577
- }, linkTypeList.map(function (type) {
21671
+ }, mergedLinkTypeList.map(function (type) {
21578
21672
  return /*#__PURE__*/React__default['default'].createElement("option", {
21579
21673
  key: type.value,
21580
21674
  value: type.value
@@ -21620,11 +21714,63 @@
21620
21714
  key: sheet.id,
21621
21715
  value: sheet.name
21622
21716
  }, sheet.name);
21717
+ })), tooltip)), currentCustomConfig && ( /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, currentCustomConfig.render ? currentCustomConfig.render({
21718
+ value: linkAddress,
21719
+ position: {
21720
+ r: r,
21721
+ c: c
21722
+ },
21723
+ onChange: function onChange(v) {
21724
+ return setLinkAddress(v);
21725
+ },
21726
+ setPayload: function setPayload(next) {
21727
+ setCustomPayload(function (prev) {
21728
+ return typeof next === "function" ? next(prev) : next;
21729
+ });
21730
+ },
21731
+ payload: customPayload,
21732
+ ctx: {
21733
+ context: context,
21734
+ setContext: setContext,
21735
+ settings: settings
21736
+ }
21737
+ }) : ( /*#__PURE__*/React__default['default'].createElement("input", {
21738
+ className: "leankylin-link-modify-input ".concat(canSubmit ? "" : "error-input"),
21739
+ spellCheck: "false",
21740
+ value: linkAddress,
21741
+ onChange: function onChange(e) {
21742
+ return setLinkAddress(e.target.value);
21743
+ }
21623
21744
  })), tooltip))), /*#__PURE__*/React__default['default'].createElement("div", {
21624
21745
  className: "modal-footer"
21625
21746
  }, renderBottomButton(function () {
21626
- if (!isLinkAddressValid.isValid) return;
21747
+ if (!canSubmit) return;
21627
21748
  lodash.set(refs.globalCache, "linkCard.mouseEnter", false);
21749
+ if (currentCustomConfig === null || currentCustomConfig === void 0 ? void 0 : currentCustomConfig.onSave) {
21750
+ var origin = function () {
21751
+ var o = core.getCellHyperlink(context, r, c);
21752
+ return o ? {
21753
+ linkType: o.linkType,
21754
+ linkAddress: o.linkAddress,
21755
+ payload: o.payload
21756
+ } : undefined;
21757
+ }();
21758
+ var saved = currentCustomConfig.onSave({
21759
+ linkText: linkText,
21760
+ linkAddress: linkAddress,
21761
+ position: {
21762
+ r: r,
21763
+ c: c
21764
+ },
21765
+ origin: origin
21766
+ });
21767
+ if (!saved) return;
21768
+ setContext(function (draftCtx) {
21769
+ var _saved$payload;
21770
+ return core.saveHyperlink(draftCtx, r, c, linkText || saved.linkAddress, saved.linkType, saved.linkAddress, _objectSpread2(_objectSpread2({}, customPayload), (_saved$payload = saved.payload) !== null && _saved$payload !== void 0 ? _saved$payload : {}));
21771
+ });
21772
+ return;
21773
+ }
21628
21774
  setContext(function (draftCtx) {
21629
21775
  return core.saveHyperlink(draftCtx, r, c, linkText, linkType, linkAddress);
21630
21776
  });
@@ -23501,10 +23647,30 @@
23501
23647
  if (link == null) {
23502
23648
  debouncedShowLinkCard(globalCache, rc.r, rc.c, false);
23503
23649
  } else {
23650
+ var _settings$customLinkT, _customConfig$onHover, _settings$hooks, _settings$hooks$onHyp;
23504
23651
  core.showLinkCard(ctx, rc.r, rc.c, false);
23505
23652
  debouncedShowLinkCard(globalCache, rc.r, rc.c, false, true);
23653
+ var payload = link.payload;
23654
+ var customConfigMap = ((_settings$customLinkT = settings === null || settings === void 0 ? void 0 : settings.customLinkTypes) !== null && _settings$customLinkT !== void 0 ? _settings$customLinkT : []).reduce(function (acc, it) {
23655
+ if (it.type) acc[it.type] = it;
23656
+ return acc;
23657
+ }, {});
23658
+ var customConfig = customConfigMap[link.linkType];
23659
+ var hoverInfo = {
23660
+ linkType: link.linkType,
23661
+ linkAddress: link.linkAddress,
23662
+ payload: payload,
23663
+ position: {
23664
+ r: rc.r,
23665
+ c: rc.c,
23666
+ sheetId: ctx.currentSheetId
23667
+ },
23668
+ event: e
23669
+ };
23670
+ customConfig === null || customConfig === void 0 ? void 0 : (_customConfig$onHover = customConfig.onHover) === null || _customConfig$onHover === void 0 ? void 0 : _customConfig$onHover.call(customConfig, hoverInfo);
23671
+ settings === null || settings === void 0 ? void 0 : (_settings$hooks = settings.hooks) === null || _settings$hooks === void 0 ? void 0 : (_settings$hooks$onHyp = _settings$hooks.onHyperlinkHover) === null || _settings$hooks$onHyp === void 0 ? void 0 : _settings$hooks$onHyp.call(_settings$hooks, hoverInfo);
23506
23672
  }
23507
- }, [debouncedShowLinkCard]);
23673
+ }, [debouncedShowLinkCard, settings]);
23508
23674
  var lastHoverCellRef = React.useRef(null);
23509
23675
  var onMouseMove = React.useCallback(function (nativeEvent) {
23510
23676
  var _gc$commentBox, _gc$commentBox2, _gc$searchDialog, _gc$linkCard;