@abtnode/ux 1.16.29-beta-0070353c → 1.16.29-beta-e04c6f40

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.
@@ -6,6 +6,7 @@ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
6
6
  import Toast from '@arcblock/ux/lib/Toast';
7
7
  import Button from '@arcblock/ux/lib/Button';
8
8
  import isURL from 'validator/lib/isURL';
9
+ import { joinURL, withQuery } from 'ufo';
9
10
  import { useNodeContext } from '../../contexts/node';
10
11
  import { useBlockletContext } from '../../contexts/blocklet';
11
12
  import useConfirm from '../../hooks/confirm';
@@ -82,15 +83,28 @@ function NotificationPushKit() {
82
83
  if (formState.isDirty) {
83
84
  await onSubmit(data, event, false);
84
85
  }
86
+ const appUrl = (blocklet?.configs || []).find(x => x.key === 'BLOCKLET_APP_URL')?.value;
85
87
  await api.sendPush({
86
88
  input: {
87
89
  did,
88
90
  receiver: pageState.testReceiver,
89
91
  notification: JSON.stringify({
90
- title: 'Test push-kit notification',
91
- body: 'This is message from push-kit config test',
92
92
  type: 'passthrough',
93
- passthroughType: 'messageStatus'
93
+ passthroughType: 'messageStatus',
94
+ data: {
95
+ message: {
96
+ title: 'Test push-kit notification',
97
+ body: 'This is message from push-kit config test',
98
+ sender: {
99
+ did: blocklet?.appDid,
100
+ fullName: blocklet?.meta?.title,
101
+ avatar: withQuery(joinURL(appUrl, '/.well-known/service/blocklet/logo'), {
102
+ v: blocklet?.meta?.version,
103
+ t: new Date(blocklet?.updatedAt || 0).getTime()
104
+ })
105
+ }
106
+ }
107
+ }
94
108
  })
95
109
  }
96
110
  });
@@ -169,6 +169,7 @@ function Branding({
169
169
  children: /*#__PURE__*/_jsx(ConnectStoreButton, {
170
170
  blocklet: blocklet,
171
171
  store: wantToConnectStore,
172
+ componentDid: componentDid,
172
173
  onChangeStore: setWantToConnectStore,
173
174
  disabled: !params.blockletTitle || readOnly || loading,
174
175
  loading: loading,
@@ -1,16 +1,16 @@
1
- import { useState, useRef } from 'react';
2
- import PropTypes from 'prop-types';
3
- import Button from '@mui/material/Button';
4
- import ButtonGroup from '@mui/material/ButtonGroup';
5
- import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
6
- import ClickAwayListener from '@mui/material/ClickAwayListener';
7
- import Grow from '@mui/material/Grow';
8
- import Paper from '@mui/material/Paper';
9
- import Popper from '@mui/material/Popper';
10
- import MenuItem from '@mui/material/MenuItem';
11
- import MenuList from '@mui/material/MenuList';
12
- import Spinner from '@mui/material/CircularProgress';
13
1
  import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { BLOCKLET_TENANT_MODES } from '@blocklet/constant';
3
+ import AddIcon from '@mui/icons-material/Add';
4
+ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
5
+ import { Button, ButtonGroup, CircularProgress, ClickAwayListener, Divider, Grow, IconButton, MenuItem, MenuList, Paper, Popper, Typography } from '@mui/material';
6
+ import PropTypes from 'prop-types';
7
+ import { Icon } from '@iconify/react';
8
+ import { useRef, useState } from 'react';
9
+ import Toast from '@arcblock/ux/lib/Toast';
10
+ import formatError from '@abtnode/util/lib/format-error';
11
+ import AddStore from '../../../store/add';
12
+ import { useNodeContext } from '../../../contexts/node';
13
+ import ConfirmDialog from '../../../confirm';
14
14
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
15
15
  export default function ConnectStoreButton({
16
16
  blocklet,
@@ -18,19 +18,25 @@ export default function ConnectStoreButton({
18
18
  onChangeStore,
19
19
  onClick,
20
20
  disabled,
21
- loading
21
+ loading,
22
+ componentDid
22
23
  }) {
23
24
  const {
24
25
  t
25
26
  } = useLocaleContext();
26
27
  const [open, setOpen] = useState(false);
27
28
  const anchorRef = useRef(null);
28
- const handleMenuItemClick = nextStore => {
29
+ const [openAddStore, setOpenAddStore] = useState(false);
30
+ const {
31
+ api
32
+ } = useNodeContext();
33
+ const [deleteStore, setDeleteStore] = useState(null);
34
+ const handleSelectStore = nextStore => {
29
35
  onChangeStore(nextStore);
30
36
  setOpen(false);
31
37
  };
32
38
  const handleToggle = () => {
33
- setOpen(prevOpen => !prevOpen);
39
+ setOpen(true);
34
40
  };
35
41
  const handleClose = event => {
36
42
  if (anchorRef.current && anchorRef.current.contains(event.target)) {
@@ -38,7 +44,32 @@ export default function ConnectStoreButton({
38
44
  }
39
45
  setOpen(false);
40
46
  };
41
- const options = blocklet?.settings?.storeList || [];
47
+ const handleOpenAddStore = () => {
48
+ setOpenAddStore(true);
49
+ };
50
+ const handleCloseAddStore = () => {
51
+ setOpenAddStore(false);
52
+ };
53
+ const handleDeleteStore = async () => {
54
+ if (!deleteStore) {
55
+ return;
56
+ }
57
+ try {
58
+ await api.deleteBlockletStore({
59
+ input: {
60
+ teamDid: blocklet.meta.did,
61
+ url: deleteStore.url,
62
+ projectId: ''
63
+ }
64
+ });
65
+ setDeleteStore(null);
66
+ } catch (err) {
67
+ Toast.error(`Remove Blocklet Store Error: ${formatError(err)}`);
68
+ }
69
+ };
70
+ const storeList = blocklet?.settings?.storeList || [];
71
+ const did = blocklet?.meta?.did;
72
+ const manageable = !(componentDid && window.blocklet?.tenantMode === BLOCKLET_TENANT_MODES.MULTIPLE);
42
73
  return /*#__PURE__*/_jsxs(_Fragment, {
43
74
  children: [/*#__PURE__*/_jsxs(ButtonGroup, {
44
75
  disabled: disabled,
@@ -48,7 +79,7 @@ export default function ConnectStoreButton({
48
79
  "aria-label": "Button group with connect store",
49
80
  children: [/*#__PURE__*/_jsxs(Button, {
50
81
  onClick: onClick,
51
- children: [loading && /*#__PURE__*/_jsx(Spinner, {
82
+ children: [loading && /*#__PURE__*/_jsx(CircularProgress, {
52
83
  size: 14,
53
84
  sx: {
54
85
  mr: 0.5
@@ -83,18 +114,60 @@ export default function ConnectStoreButton({
83
114
  children: /*#__PURE__*/_jsx(Paper, {
84
115
  children: /*#__PURE__*/_jsx(ClickAwayListener, {
85
116
  onClickAway: handleClose,
86
- children: /*#__PURE__*/_jsx(MenuList, {
117
+ children: /*#__PURE__*/_jsxs(MenuList, {
87
118
  id: "split-button-menu",
88
119
  autoFocusItem: true,
89
- children: options.map(option => /*#__PURE__*/_jsx(MenuItem, {
120
+ children: [storeList.map(option => /*#__PURE__*/_jsxs(MenuItem, {
90
121
  selected: option.id === store.id,
91
- onClick: () => handleMenuItemClick(option),
92
- children: option.name
93
- }, option))
122
+ sx: {
123
+ height: 40
124
+ },
125
+ onClick: () => handleSelectStore(option),
126
+ children: [/*#__PURE__*/_jsx(Typography, {
127
+ variant: "inherit",
128
+ children: option.name
129
+ }), manageable && !option.protected && /*#__PURE__*/_jsx(IconButton, {
130
+ sx: {
131
+ ml: 1
132
+ },
133
+ onClick: e => {
134
+ e.preventDefault();
135
+ e.stopPropagation();
136
+ setDeleteStore(option);
137
+ },
138
+ children: /*#__PURE__*/_jsx(Icon, {
139
+ icon: "ic:outline-delete"
140
+ })
141
+ })]
142
+ }, option.url)), manageable && /*#__PURE__*/_jsx(Divider, {}), manageable && /*#__PURE__*/_jsxs(MenuItem, {
143
+ onClick: handleOpenAddStore,
144
+ children: [/*#__PURE__*/_jsx(AddIcon, {
145
+ font: true
146
+ }), /*#__PURE__*/_jsx(Typography, {
147
+ variant: "inherit",
148
+ children: t('store.blockletRegistry.addRegistry')
149
+ })]
150
+ })]
94
151
  })
95
152
  })
96
153
  })
97
154
  })
155
+ }), openAddStore && /*#__PURE__*/_jsx(AddStore, {
156
+ hiddenChildren: true,
157
+ open: true,
158
+ onClose: handleCloseAddStore,
159
+ teamDid: did,
160
+ storeList: storeList,
161
+ scope: "studio"
162
+ }), deleteStore && /*#__PURE__*/_jsx(ConfirmDialog, {
163
+ displayError: true,
164
+ title: `${t('common.delete')} ${deleteStore.name}`,
165
+ description: t('blocklet.publish.deleteStoreTip', {
166
+ name: deleteStore.name
167
+ }),
168
+ confirm: t('common.confirm'),
169
+ onConfirm: handleDeleteStore,
170
+ onCancel: () => setDeleteStore(null)
98
171
  })]
99
172
  });
100
173
  }
@@ -104,7 +177,10 @@ ConnectStoreButton.propTypes = {
104
177
  onChangeStore: PropTypes.func.isRequired,
105
178
  onClick: PropTypes.func.isRequired,
106
179
  loading: PropTypes.bool.isRequired,
107
- disabled: PropTypes.bool.isRequired
180
+ disabled: PropTypes.bool.isRequired,
181
+ componentDid: PropTypes.string.isRequired,
182
+ projectType: PropTypes.string.isRequired,
183
+ getData: PropTypes.func.isRequired
108
184
  };
109
185
  ConnectStoreButton.defaultProps = {
110
186
  store: null,
@@ -19,7 +19,9 @@ function ConnectStoreList({
19
19
  onDelete,
20
20
  projectType,
21
21
  componentDid,
22
- onOpenConnectStore
22
+ onOpenConnectStore,
23
+ behavior,
24
+ onSelectConnectStore
23
25
  }) {
24
26
  const {
25
27
  t
@@ -35,9 +37,8 @@ function ConnectStoreList({
35
37
  }, {});
36
38
  }, [connectedStores]);
37
39
  const did = blocklet?.meta?.did;
38
- const handleAddStore = () => {};
39
40
  return /*#__PURE__*/_jsxs(_Fragment, {
40
- children: [!!storeList?.length && /*#__PURE__*/_jsx(Alert, {
41
+ children: [behavior === 'connect' && !!storeList?.length && /*#__PURE__*/_jsx(Alert, {
41
42
  severity: "info",
42
43
  style: {
43
44
  width: '100%'
@@ -61,6 +62,8 @@ function ConnectStoreList({
61
62
  "data-cy": "store-switch",
62
63
  children: /*#__PURE__*/_jsx(ListItemText, {
63
64
  children: /*#__PURE__*/_jsx(StoreItem, {
65
+ behavior: behavior,
66
+ onSelectConnectStore: onSelectConnectStore,
64
67
  releaseId: releaseId,
65
68
  projectId: projectId,
66
69
  releaseType: releaseType,
@@ -76,7 +79,6 @@ function ConnectStoreList({
76
79
  })
77
80
  }, x.url))
78
81
  }), componentDid && window.blocklet?.tenantMode === BLOCKLET_TENANT_MODES.MULTIPLE ? null : /*#__PURE__*/_jsx(AddStore, {
79
- onAdd: handleAddStore,
80
82
  teamDid: did,
81
83
  storeList: storeList,
82
84
  scope: "studio"
@@ -94,7 +96,9 @@ ConnectStoreList.propTypes = {
94
96
  connectedStores: PropTypes.arrayOf(PropTypes.object).isRequired,
95
97
  projectType: PropTypes.string,
96
98
  componentDid: PropTypes.string,
97
- onOpenConnectStore: PropTypes.func
99
+ onOpenConnectStore: PropTypes.func,
100
+ onSelectConnectStore: PropTypes.func,
101
+ behavior: PropTypes.string
98
102
  };
99
103
  ConnectStoreList.defaultProps = {
100
104
  projectType: '',
@@ -102,6 +106,8 @@ ConnectStoreList.defaultProps = {
102
106
  publishedStoreIds: [],
103
107
  onPublish: () => {},
104
108
  onDelete: () => {},
105
- onOpenConnectStore: () => {}
109
+ onOpenConnectStore: () => {},
110
+ onSelectConnectStore: () => {},
111
+ behavior: 'connect'
106
112
  };
107
113
  export default ConnectStoreList;
@@ -53,7 +53,9 @@ const addComponentTabs = ({
53
53
  });
54
54
  };
55
55
  const pickParams = (baseParams, app) => {
56
- const params = pick(baseParams, ['blockletVersion', 'blockletTitle', 'blockletDescription', 'blockletLogo', 'blockletIntroduction', 'blockletScreenshots', 'connectedStores', 'blockletComponents', 'lastReleaseId', 'uploadedResource', 'note']);
56
+ const params = pick(baseParams, ['blockletVersion', 'blockletTitle', 'blockletDescription', 'blockletLogo', 'blockletIntroduction', 'blockletScreenshots', 'connectedStores', 'blockletComponents', 'lastReleaseId', 'uploadedResource'
57
+ // 'note',
58
+ ]);
57
59
  if (!params.blockletComponents) {
58
60
  params.blockletComponents = (app.children || []).map(x => ({
59
61
  did: x.meta.did,
@@ -1,13 +1,14 @@
1
- import { useCallback } from 'react';
2
1
  import PropTypes from 'prop-types';
3
2
  import styled from '@emotion/styled';
4
3
  import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
5
4
  import DidButton from '@arcblock/did-connect/lib/Button';
6
5
  import { AUTH_SERVICE_PREFIX, API_DID_PREFIX } from '@arcblock/did-connect/lib/constant';
7
6
  import { joinURL } from 'ufo';
7
+ import { useMemoizedFn, useMount, useReactive } from 'ahooks';
8
8
  import { formatDateTime } from '../util';
9
9
  import usePassportId from '../hooks/use-passport-id';
10
10
  import { useSessionContext } from '../contexts/session';
11
+ import blockletSdk from '../util/sdk';
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  function InvitationReceive({
13
14
  invitation,
@@ -30,28 +31,47 @@ function InvitationReceive({
30
31
  if (typeof window !== 'undefined') {
31
32
  componentId = window?.blocklet?.componentId;
32
33
  }
33
- const passportId = getPassportId();
34
- const extraParams = {
35
- // 生成 passport 信息需要 baseUrl 字段
36
- baseUrl: window.location.origin,
37
- componentId
38
- };
39
- if (passportId) {
40
- extraParams.passportId = passportId;
41
- }
42
- if (action === 'invite') {
43
- extraParams.inviteId = invitation.inviteId;
44
- } else if (action === 'issue-passport') {
45
- extraParams.id = invitation.inviteId;
46
- }
47
- const onClose = useCallback(() => {
34
+ const currentState = useReactive({
35
+ loading: false,
36
+ extraParams: {
37
+ // 生成 passport 信息需要 baseUrl 字段
38
+ baseUrl: window.location.origin,
39
+ componentId,
40
+ sourceAppPid: invitation?.sourceAppPid || null
41
+ }
42
+ });
43
+ useMount(async () => {
44
+ const passportId = getPassportId();
45
+ if (passportId) {
46
+ currentState.extraParams.passportId = passportId;
47
+ }
48
+ if (action === 'invite') {
49
+ currentState.extraParams.inviteId = invitation.inviteId;
50
+ } else if (action === 'issue-passport') {
51
+ currentState.extraParams.id = invitation.inviteId;
52
+ }
53
+ if (inService && invitation?.receiver?.did) {
54
+ currentState.loading = true;
55
+ try {
56
+ const publicInfo = await blockletSdk.user.getUserPublicInfo({
57
+ did: invitation.receiver.did
58
+ });
59
+ if (publicInfo?.sourceAppPid) {
60
+ currentState.extraParams.sourceAppPid = publicInfo.sourceAppPid;
61
+ }
62
+ } finally {
63
+ currentState.loading = false;
64
+ }
65
+ }
66
+ });
67
+ const onClose = useMemoizedFn(() => {
48
68
  connectApi.close();
49
- }, [connectApi]);
50
- const onSuccess = useCallback((...args) => {
69
+ });
70
+ const onSuccess = useMemoizedFn((...args) => {
51
71
  connectApi.close();
52
72
  onLogin(...args);
53
- }, [onLogin, connectApi]);
54
- const onClickReceive = useCallback(() => {
73
+ });
74
+ const onClickReceive = useMemoizedFn(() => {
55
75
  if (typeof onReceive === 'function') {
56
76
  onReceive();
57
77
  return;
@@ -62,10 +82,11 @@ function InvitationReceive({
62
82
  className: 'connect',
63
83
  forceConnected: invitation?.receiver?.did || false,
64
84
  autoConnect: false,
85
+ disableSwitchApp: true,
65
86
  locale,
66
87
  extraParams: {
67
88
  provider: 'wallet',
68
- ...extraParams
89
+ ...currentState.extraParams
69
90
  },
70
91
  baseUrl: window.location.origin,
71
92
  prefix: joinURL(window.location.origin, AUTH_SERVICE_PREFIX, API_DID_PREFIX),
@@ -86,8 +107,9 @@ function InvitationReceive({
86
107
  className: 'connect',
87
108
  forceConnected: invitation?.receiver?.did || false,
88
109
  autoConnect: false,
110
+ disableSwitchApp: true,
89
111
  locale,
90
- extraParams,
112
+ extraParams: currentState.extraParams,
91
113
  messages: {
92
114
  title: t('receive.dialog.title'),
93
115
  scan: t('receive.dialog.scan'),
@@ -98,11 +120,10 @@ function InvitationReceive({
98
120
  onClose
99
121
  });
100
122
  }
101
-
102
- // eslint-disable-next-line react-hooks/exhaustive-deps
103
- }, [connectApi.openPopup]);
123
+ });
104
124
  return /*#__PURE__*/_jsxs(Root, {
105
125
  children: [/*#__PURE__*/_jsx(DidButton, {
126
+ loading: currentState.loading,
106
127
  size: "large",
107
128
  variant: "contained",
108
129
  className: "invite-receive__button",
@@ -34,8 +34,8 @@ function Invitation({
34
34
  });
35
35
  }
36
36
  const isSuccess = status === 'success' || state?.data?.status === 'success';
37
- const Section1 = isSuccess ? InvitationSuccess : InvitationUser;
38
- const Section2 = isSuccess ? InvitationLogin : InvitationReceive;
37
+ const SectionHeader = isSuccess ? InvitationSuccess : InvitationUser;
38
+ const SectionFooter = isSuccess ? InvitationLogin : InvitationReceive;
39
39
  return /*#__PURE__*/_jsx(Root, {
40
40
  className: "page-invite__wrapper",
41
41
  children: state?.data ? /*#__PURE__*/_jsxs(_Fragment, {
@@ -43,14 +43,14 @@ function Invitation({
43
43
  invitation: state.data
44
44
  }), /*#__PURE__*/_jsxs(Box, {
45
45
  className: "page-invite__card",
46
- children: [/*#__PURE__*/_jsx(Section1, {
46
+ children: [/*#__PURE__*/_jsx(SectionHeader, {
47
47
  invitation: state.data
48
48
  }), /*#__PURE__*/_jsx(InvitationPassport, {
49
49
  invitation: state.data,
50
50
  action: action,
51
51
  createPassportSvg: createPassportSvg,
52
52
  passportColor: passportColor
53
- }), /*#__PURE__*/_jsx(Section2, {
53
+ }), /*#__PURE__*/_jsx(SectionFooter, {
54
54
  invitation: state.data,
55
55
  action: action,
56
56
  onLogin: onLoginSuccess,
package/lib/locales/ar.js CHANGED
@@ -356,7 +356,9 @@ export default {
356
356
  blockletStudio: 'استوديو',
357
357
  visitStore: 'زيارة المتجر',
358
358
  reconnect: 'إعادة الاتصال',
359
- change: 'تغيير'
359
+ change: 'تغيير',
360
+ disconnect: 'توقف',
361
+ sourceApp: 'ينتمي إلى التطبيق'
360
362
  },
361
363
  blocklet: {
362
364
  external: 'خارجي',
@@ -727,7 +729,7 @@ export default {
727
729
  },
728
730
  resourceTip: 'حاليًا ، كما هو الحال بوصفه كتلة مورد ، لا يمكن تثبيته مباشرة من المتجر.',
729
731
  whyCantSeeInStore: 'لماذا لا أستطيع رؤية هذا البلوكليت في المتجر؟',
730
- whyCantSeeResourceBlockletInStore: 'لماذا لا يمكنني رؤية بلوكليت الموارد هذا في المتجر؟',
732
+ whyCantSeeResourceBlockletInStore: 'تم إخفاء Blockletات الموارد من صفحة قائمة المتجر افتراضيًا',
731
733
  tenantScope: 'مستأجر',
732
734
  blockletStudio: 'استوديو بلوكليت',
733
735
  allComponentsNotRunning: 'لا يعمل بلوكلتس، يرجى تشغيله أولاً',
@@ -744,7 +746,9 @@ export default {
744
746
  branding: 'العلامة التجارية',
745
747
  brandingHelp: 'سيتم عرض مزيد من المعلومات حول البلوكلت في المتجر',
746
748
  resourceSelect: 'اختر موردًا من Blocklets',
747
- resourceUpload: 'تحميل المورد من القرص الخاص بك (الفهرس.html مطلوب في الأرشيف)'
749
+ resourceUpload: 'تحميل المورد من القرص الخاص بك (الفهرس.html مطلوب في الأرشيف)',
750
+ deleteStoreTip: 'هل أنت متأكد أنك تريد إزالة {name} من قائمة متجر الاتصال؟',
751
+ disconnectStoreTip: 'سيتم حذف بلوكليت من المخزن بعد الفصل. هل أنت متأكد من أنك تريد الفصل؟'
748
752
  },
749
753
  titleValidationError: 'يجب أن يكون طول العنوان على الأقل 3 أحرف',
750
754
  descriptionValidationError: 'يجب أن تكون طول الوصف بين 3 و 160 حرفًا'
package/lib/locales/de.js CHANGED
@@ -356,7 +356,9 @@ export default {
356
356
  blockletStudio: 'Studio',
357
357
  visitStore: 'Besuche den Laden',
358
358
  reconnect: 'Verbinden wiederherstellen',
359
- change: 'Ändern'
359
+ change: 'Ändern',
360
+ disconnect: 'Verbindung trennen',
361
+ sourceApp: 'Zur App gehörend'
360
362
  },
361
363
  blocklet: {
362
364
  external: 'Extern',
@@ -727,7 +729,7 @@ export default {
727
729
  },
728
730
  resourceTip: 'Zurzeit kann es als Ressourcen-Blocklet nicht direkt aus dem Store installiert werden.',
729
731
  whyCantSeeInStore: 'Warum kann ich dieses Blocklet nicht im Store sehen?',
730
- whyCantSeeResourceBlockletInStore: 'Warum kann ich diesen Ressourcen-Blocklet nicht im Store sehen?',
732
+ whyCantSeeResourceBlockletInStore: 'Ressourcen-Blocklets sind standardmäßig auf der Store-Listenseite ausgeblendet',
731
733
  tenantScope: 'Mieter',
732
734
  blockletStudio: 'Blocklet Studio',
733
735
  allComponentsNotRunning: 'Blocklets läuft nicht, bitte starten Sie es zuerst',
@@ -744,7 +746,9 @@ export default {
744
746
  branding: 'Branding',
745
747
  brandingHelp: 'Weitere Informationen über den Blocklet werden im Store angezeigt',
746
748
  resourceSelect: 'Wählen Sie eine Ressource aus Blocklets',
747
- resourceUpload: 'Ressource von Ihrer Festplatte hochladen (index.html ist im Archiv erforderlich)'
749
+ resourceUpload: 'Ressource von Ihrer Festplatte hochladen (index.html ist im Archiv erforderlich)',
750
+ deleteStoreTip: 'Möchten Sie {name} wirklich aus der Verbindungsliste des Stores entfernen?',
751
+ disconnectStoreTip: 'Das Blocklet wird nach dem Trennen aus dem Store entfernt. Möchten Sie wirklich trennen?'
748
752
  },
749
753
  titleValidationError: 'Die Länge des Titels muss mindestens 3 Zeichen betragen',
750
754
  descriptionValidationError: 'Die Beschreibungslänge muss zwischen 3 und 160 Zeichen liegen'
package/lib/locales/en.js CHANGED
@@ -259,6 +259,7 @@ export default {
259
259
  protocol: 'Protocol',
260
260
  purchase: 'Purchase',
261
261
  reconnect: 'Reconnect',
262
+ disconnect: 'Disconnect',
262
263
  readMore: 'More',
263
264
  redirect: 'Redirect',
264
265
  redirectCode: 'Redirect Code',
@@ -348,7 +349,8 @@ export default {
348
349
  endTime: 'End time',
349
350
  selected: 'Selected',
350
351
  timeoutError: 'Timeout error',
351
- tags: 'Tags'
352
+ tags: 'Tags',
353
+ sourceApp: 'Belong to App'
352
354
  },
353
355
  blocklet: {
354
356
  external: 'External',
@@ -660,6 +662,7 @@ export default {
660
662
  branding: 'Branding',
661
663
  brandingHelp: 'More information about the blocklet will be displayed in the Store',
662
664
  download: 'Download {name}',
665
+ deleteStoreTip: 'Are you sure you want to remove {name} from the connect Store list?',
663
666
  delete: 'Delete {name}',
664
667
  copyInstallUrl: 'Copy Install URL',
665
668
  createResource: 'Create Resource',
@@ -676,6 +679,7 @@ export default {
676
679
  createBlockletTip: 'You can create new blocklet through existing resources, components, and configuration in this application',
677
680
  createBlocklet: 'New blocklet',
678
681
  reconnectStoreTip: 'After reconnecting, a new developer will be bound. Are you sure you want to reconnect?',
682
+ disconnectStoreTip: 'After disconnecting, the blocklet will be removed from the store. Are you sure you want to disconnect?',
679
683
  componentNotRunning: 'Blocklet {name} is not running, please start it first',
680
684
  allComponentsNotRunning: 'Blocklets is not running, please start it first',
681
685
  releaseEmptyTip: "There aren't any releases here",
package/lib/locales/es.js CHANGED
@@ -356,7 +356,9 @@ export default {
356
356
  blockletStudio: 'Estudio',
357
357
  visitStore: 'Visitar tienda',
358
358
  reconnect: 'Reconecta',
359
- change: 'Cambiar'
359
+ change: 'Cambiar',
360
+ disconnect: 'Desconectar',
361
+ sourceApp: 'Pertenece a la aplicación'
360
362
  },
361
363
  blocklet: {
362
364
  external: 'Externo',
@@ -727,7 +729,7 @@ export default {
727
729
  },
728
730
  resourceTip: 'Actualmente, como un Bloque de Recursos, no se puede instalar directamente desde la Tienda.',
729
731
  whyCantSeeInStore: '¿Por qué no puedo ver este blocklet en la Tienda?',
730
- whyCantSeeResourceBlockletInStore: '¿Por qué no puedo ver este Recurso Blocklet en la Tienda?',
732
+ whyCantSeeResourceBlockletInStore: 'Los Blocklets de recurso están ocultos de la página de listado de la tienda de forma predeterminada',
731
733
  tenantScope: 'Inquilino',
732
734
  blockletStudio: 'Blocklet Studio',
733
735
  allComponentsNotRunning: 'Blocklets no está ejecutándose, por favor inícialo primero',
@@ -744,7 +746,9 @@ export default {
744
746
  branding: 'Branding',
745
747
  brandingHelp: 'Se mostrará más información sobre el blocklet en la tienda',
746
748
  resourceSelect: 'Seleccionar recurso de blocklets',
747
- resourceUpload: 'Cargar recurso desde tu disco (index.html es requerido en el archivo)'
749
+ resourceUpload: 'Cargar recurso desde tu disco (index.html es requerido en el archivo)',
750
+ deleteStoreTip: '¿Estás seguro de que quieres eliminar a {name} de la lista de la tienda Connect?',
751
+ disconnectStoreTip: 'Después de la desconexión, se eliminará el blocklet de la tienda. ¿Seguro que desea desconectar?'
748
752
  },
749
753
  titleValidationError: 'La longitud del título debe ser de al menos 3 caracteres',
750
754
  descriptionValidationError: 'La longitud de la descripción debe estar entre 3 y 160 caracteres'
package/lib/locales/fr.js CHANGED
@@ -356,7 +356,9 @@ export default {
356
356
  blockletStudio: 'Studio',
357
357
  visitStore: 'Visiter le magasin',
358
358
  reconnect: 'Reconnecter',
359
- change: 'Changer'
359
+ change: 'Changer',
360
+ disconnect: 'Déconnecter',
361
+ sourceApp: "Appartient à l'application"
360
362
  },
361
363
  blocklet: {
362
364
  external: 'Externe',
@@ -727,7 +729,7 @@ export default {
727
729
  },
728
730
  resourceTip: 'Actuellement, en tant que bloc de ressources, il ne peut pas être installé directement depuis le Store.',
729
731
  whyCantSeeInStore: 'Pourquoi je ne peux pas voir ce blocklet dans le Store?',
730
- whyCantSeeResourceBlockletInStore: 'Pourquoi je ne peux pas voir ce Blocklet de ressources dans le magasin ?',
732
+ whyCantSeeResourceBlockletInStore: 'Les Blocklets de ressources sont masqués par défaut de la page de liste du magasin',
731
733
  tenantScope: 'Locataire',
732
734
  blockletStudio: 'Blocklet Studio',
733
735
  allComponentsNotRunning: "Blocklets ne fonctionne pas, veuillez le démarrer d'abord",
@@ -744,7 +746,9 @@ export default {
744
746
  branding: 'Branding',
745
747
  brandingHelp: "Plus d'informations sur le blocklet seront affichées dans le magasin",
746
748
  resourceSelect: 'Sélectionnez une ressource des blocklets',
747
- resourceUpload: "Téléchargez la ressource depuis votre disque (index.html est requis dans l'archive)"
749
+ resourceUpload: "Téléchargez la ressource depuis votre disque (index.html est requis dans l'archive)",
750
+ deleteStoreTip: 'Êtes-vous sûr de vouloir supprimer {name} de la liste du magasin Connect?',
751
+ disconnectStoreTip: 'Le bloclet sera supprimé du store après sa déconnexion. Êtes-vous sûr de vouloir le déconnecter ?'
748
752
  },
749
753
  titleValidationError: "La longueur du titre doit être d'au moins 3 caractères",
750
754
  descriptionValidationError: 'La longueur de la description doit être comprise entre 3 et 160 caractères'
package/lib/locales/hi.js CHANGED
@@ -356,7 +356,9 @@ export default {
356
356
  blockletStudio: 'स्टूडियो',
357
357
  visitStore: 'स्टोर को देखें',
358
358
  reconnect: 'पुनः कनेक्ट करें',
359
- change: 'परिवर्तन'
359
+ change: 'परिवर्तन',
360
+ disconnect: 'डिस्कनेक्ट करें',
361
+ sourceApp: 'ऐप से संबद्ध'
360
362
  },
361
363
  blocklet: {
362
364
  external: 'बाहरी',
@@ -727,7 +729,7 @@ export default {
727
729
  },
728
730
  resourceTip: 'वर्तमान में, रिसोर्स ब्लॉकलेट के रूप में, यह स्टोर से सीधे स्थापित नहीं किया जा सकता है।',
729
731
  whyCantSeeInStore: 'क्यों मुझे स्टोर में इस ब्लॉकलेट को नहीं देख सकता?',
730
- whyCantSeeResourceBlockletInStore: 'क्यों मुझे दुकान में इस संसाधन ब्लॉकलेट को नहीं देख सकता हूँ?',
732
+ whyCantSeeResourceBlockletInStore: 'संसाधन ब्लॉकलेट डिफ़ॉल्ट रूप से स्टोर लिस्टिंग पेज से छुपे हुए हैं',
731
733
  tenantScope: 'किरायेदार',
732
734
  blockletStudio: 'ब्लॉकलेट स्टूडियो',
733
735
  allComponentsNotRunning: 'ब्लॉकलेट्स चल नहीं रहा है, कृपया पहले इसे शुरू करें',
@@ -744,7 +746,9 @@ export default {
744
746
  branding: 'ब्रांडिंग',
745
747
  brandingHelp: 'स्टोर में ब्लॉकलेट के बारे में अधिक जानकारी दी जाएगी',
746
748
  resourceSelect: 'ब्लॉकलेट से संसाधन का चयन करें',
747
- resourceUpload: 'अपनी डिस्क से संसाधन अपलोड करें (संग्रह में index.html आवश्यक है)'
749
+ resourceUpload: 'अपनी डिस्क से संसाधन अपलोड करें (संग्रह में index.html आवश्यक है)',
750
+ deleteStoreTip: 'क्या आप वाकई {name} को कनेक्ट स्टोर से हटाना चाहते हैं?',
751
+ disconnectStoreTip: 'ब्लॉकलेट को डिस्कनेक्ट करने के बाद उसे स्टोर से हटा दिया जाएगा। क्या आप वाकई में उसे डिस्कनेक्ट करना चाहते हैं?'
748
752
  },
749
753
  titleValidationError: 'शीर्षक की लंबाई कम से कम 3 अक्षर होनी चाहिए',
750
754
  descriptionValidationError: 'विवरण की लंबाई 3 और 160 वर्णों के बीच होनी चाहिए'
Binary file