@abtnode/ux 1.16.29-beta-924d4db7 → 1.16.29-beta-87e06e1c

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.
@@ -48,6 +48,7 @@ function Branding({
48
48
  const uploaderScreenshotRef = useRef(null);
49
49
  const [wantToConnectStore, setWantToConnectStore] = useWantToConnectStore(blocklet);
50
50
  const openWindow = usePromiseWindowOpen({
51
+ messageType: 'connect-store-message',
51
52
  onOpen: () => setLoading(true),
52
53
  onClose: () => setLoading(false)
53
54
  });
@@ -104,7 +105,6 @@ function Branding({
104
105
  } catch (err) {
105
106
  const error = formatError(err);
106
107
  Toast.error(error);
107
- newWindow.document.write(error);
108
108
  setLoading(false);
109
109
  }
110
110
  });
@@ -24,6 +24,7 @@ import ClickToCopy from '../../../click-to-copy';
24
24
  import { formatError } from '../../../util';
25
25
  import { useNodeContext } from '../../../contexts/node';
26
26
  import ShortenLabel from '../../component/shorten-label';
27
+ import UploadedToast from './uploaded-toast';
27
28
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
28
29
  const serverEndpoint = window.env?.serverEndpoint;
29
30
  function Header({
@@ -62,6 +63,7 @@ function Header({
62
63
  const [showStoreDialog, setShowStoreDialog] = useState(false);
63
64
  const [installResourceTip, setInstallResourceTip] = useState();
64
65
  const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'));
66
+ const releaseType = params?.blockletComponents?.length > 0 ? 'pack' : 'resource';
65
67
  const onPublish = () => {
66
68
  window.parent.postMessage({
67
69
  event: 'studioDialog.uploaded',
@@ -69,7 +71,7 @@ function Header({
69
71
  }, '*');
70
72
  getRelease();
71
73
  };
72
- const onRelease = async status => {
74
+ const _onRelease = async status => {
73
75
  const errors = validateParams({
74
76
  params,
75
77
  hasSelectedResources,
@@ -122,7 +124,6 @@ function Header({
122
124
  });
123
125
  return;
124
126
  }
125
- setLoading(true);
126
127
  if (initLogoUrl) {
127
128
  try {
128
129
  const filename = await uploadImageToProject({
@@ -136,7 +137,6 @@ function Header({
136
137
  });
137
138
  } catch (err) {
138
139
  Toast.error(err.message);
139
- setLoading(false);
140
140
  return;
141
141
  }
142
142
  }
@@ -163,7 +163,6 @@ function Header({
163
163
  });
164
164
  } catch (err) {
165
165
  Toast.error(err?.response?.data?.error?.message || err.message);
166
- setLoading(false);
167
166
  setParamsErrTip({
168
167
  blockletResource: 'Invalid save the resource'
169
168
  });
@@ -177,16 +176,16 @@ function Header({
177
176
  _params.blockletIntroduction = (_params.blockletIntroduction || '').trim();
178
177
  _params.note = (_params.note || '').trim();
179
178
  _params.blockletComponents = (_params?.blockletComponents || []).filter(x => x.included).map(x => pick(x, ['did', 'required'])).map(JSON.stringify);
180
- setLoading(true);
181
- api.createRelease({
182
- input: {
183
- ..._params,
184
- did: blocklet.meta.did,
185
- projectId,
186
- releaseId: releaseUsedLast ? '' : releaseId,
187
- status
188
- }
189
- }).then(res => {
179
+ try {
180
+ await api.createRelease({
181
+ input: {
182
+ ..._params,
183
+ did: blocklet.meta.did,
184
+ projectId,
185
+ releaseId: releaseUsedLast ? '' : releaseId,
186
+ status
187
+ }
188
+ });
190
189
  if (status === 'draft') {
191
190
  Toast.success(t('blocklet.publish.saveDraftSuccess'));
192
191
  } else {
@@ -207,15 +206,7 @@ function Header({
207
206
  blockletIntroduction: '',
208
207
  note: ''
209
208
  });
210
- if (mode === 'create' || mode === 'new-release') {
211
- const id = res?.release?.id;
212
- navigate(`../${projectId}/view/${id}`, {
213
- replace: true
214
- });
215
- } else {
216
- getRelease();
217
- }
218
- }).catch(err => {
209
+ } catch (err) {
219
210
  const msg = formatError(err);
220
211
  Toast.error(msg);
221
212
  if (/resource/.test(msg) || /zip/.test(msg)) {
@@ -223,7 +214,51 @@ function Header({
223
214
  blockletResource: msg
224
215
  });
225
216
  }
226
- }).finally(() => {
217
+ }
218
+ const lastProject = await api.getProject({
219
+ input: {
220
+ did: blocklet.meta.did,
221
+ projectId
222
+ }
223
+ });
224
+ const newReleased = lastProject.project.lastReleaseId;
225
+ await pAll(lastProject.project.connectedStores.map(store => {
226
+ return async () => {
227
+ try {
228
+ // eslint-disable-next-line no-await-in-loop
229
+ const res = await api.publishToStore({
230
+ input: {
231
+ did: blocklet.meta.did,
232
+ storeId: store.storeId,
233
+ storeName: store.storeName,
234
+ projectId,
235
+ releaseId: newReleased,
236
+ type: releaseType
237
+ }
238
+ });
239
+ Toast.success( /*#__PURE__*/_jsx(UploadedToast, {
240
+ storeName: store.storeName,
241
+ storeUrl: store.storeUrl,
242
+ developerDid: store.developerDid,
243
+ published: res.url === 'published'
244
+ }), {
245
+ duration: 10000
246
+ });
247
+ } catch (err) {
248
+ Toast.error(formatError(err));
249
+ }
250
+ };
251
+ }), {
252
+ concurrency: 4
253
+ });
254
+ onPublish?.();
255
+ navigate(`../${projectId}/view/${newReleased}`, {
256
+ replace: true
257
+ });
258
+ };
259
+ const onRelease = status => {
260
+ setLoading(true);
261
+ return _onRelease(status).finally(() => {
227
262
  setLoading(false);
228
263
  });
229
264
  };
@@ -372,14 +407,21 @@ function Header({
372
407
  children: t('common.download')
373
408
  })
374
409
  }), /*#__PURE__*/_jsxs(Button, {
410
+ disabled: loading,
375
411
  variant: "contained",
376
412
  onClick: () => setShowStoreDialog(true),
377
- children: [/*#__PURE__*/_jsx(CloudUploadRoundedIcon, {
378
- style: {
413
+ children: [loading ? /*#__PURE__*/_jsx(Spinner, {
414
+ size: 14,
415
+ sx: {
416
+ mr: 1
417
+ },
418
+ color: "inherit"
419
+ }) : /*#__PURE__*/_jsx(CloudUploadRoundedIcon, {
420
+ sx: {
379
421
  fontSize: '1.3em',
380
- marginRight: 4
422
+ mr: 1
381
423
  }
382
- }), isMobile ? t('common.upload') : t('common.uploadToStore')]
424
+ }), isMobile ? t('common.upload') : t('blocklet.publish.connectOrUpload')]
383
425
  })]
384
426
  })]
385
427
  })
@@ -393,7 +435,7 @@ function Header({
393
435
  children: /*#__PURE__*/_jsx(ConnectStoreList, {
394
436
  projectType: projectType,
395
437
  blocklet: blocklet,
396
- releaseType: params?.blockletComponents?.length > 0 ? 'pack' : 'resource',
438
+ releaseType: releaseType,
397
439
  projectId: projectId,
398
440
  releaseId: releaseId,
399
441
  componentDid: componentDid,
@@ -5,6 +5,7 @@ import Tabs from '@arcblock/ux/lib/Tabs';
5
5
  import Toast from '@arcblock/ux/lib/Toast';
6
6
  import styled from '@emotion/styled';
7
7
  import { Box, FormControlLabel, Radio, RadioGroup, Tooltip, Typography, useMediaQuery } from '@mui/material';
8
+ import { useMemoizedFn } from 'ahooks';
8
9
  import pick from 'lodash/pick';
9
10
  import PropTypes from 'prop-types';
10
11
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
@@ -22,9 +23,9 @@ import Branding from './branding';
22
23
  import Header from './header';
23
24
  import Introduction from './introduction';
24
25
  import ReleaseStepper from './release-stepper';
26
+ import ResourceUpload from './resource-upload';
25
27
  import StopBox from './stop-box';
26
28
  import Version from './version';
27
- import ResourceUpload from './resource-upload';
28
29
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
29
30
  const addComponentTabs = ({
30
31
  tabs,
@@ -171,6 +172,29 @@ export default function CreateRelease({
171
172
  });
172
173
  return result;
173
174
  }, [resourceComponentsMap]);
175
+ const updateParamsByUrl = useMemoizedFn(() => {
176
+ if (!initUrl) {
177
+ return;
178
+ }
179
+ setInitLogoUrl(initUrl.searchParams.get('logo'));
180
+ setParams(old => {
181
+ return {
182
+ ...old,
183
+ blockletTitle: old?.blockletTitle || initUrl.searchParams.get('title'),
184
+ blockletDescription: old?.blockletDescription || initUrl.searchParams.get('description'),
185
+ blockletIntroduction: old?.blockletIntroduction || initUrl.searchParams.get('introduction') || initUrl.searchParams.get('description'),
186
+ blockletComponents: old?.blockletComponents || JSON.parse(initUrl.searchParams.get('components') || '[]'),
187
+ note: old?.note || initUrl.searchParams.get('note') || 'No note'
188
+ };
189
+ });
190
+ const resourcesString = initUrl.searchParams.get('resources');
191
+ try {
192
+ const resources = JSON.parse(resourcesString);
193
+ setInitialResources(resources);
194
+ } catch (_) {
195
+ //
196
+ }
197
+ });
174
198
  const getRelease = async () => {
175
199
  if (!releaseId) {
176
200
  return;
@@ -230,6 +254,9 @@ export default function CreateRelease({
230
254
  }
231
255
  const theParams = pickParams(data, blocklet);
232
256
  setParams(theParams);
257
+ if (!data.lastReleaseId) {
258
+ updateParamsByUrl();
259
+ }
233
260
  } catch (err) {
234
261
  setLoading(false);
235
262
  Toast.error(formatError(err));
@@ -262,23 +289,9 @@ export default function CreateRelease({
262
289
  }, [getData]);
263
290
  useEffect(() => {
264
291
  if (projectId === UNOWNED_DID && (mode === 'create' || mode === 'new-release') && initUrl) {
265
- setInitLogoUrl(initUrl.searchParams.get('logo'));
266
- setParams({
267
- blockletTitle: initUrl.searchParams.get('title'),
268
- blockletDescription: initUrl.searchParams.get('description'),
269
- blockletIntroduction: initUrl.searchParams.get('introduction') || initUrl.searchParams.get('description'),
270
- blockletComponents: JSON.parse(initUrl.searchParams.get('components') || '[]'),
271
- note: initUrl.searchParams.get('note') || 'No note'
272
- });
273
- const resourcesString = initUrl.searchParams.get('resources');
274
- try {
275
- const resources = JSON.parse(resourcesString);
276
- setInitialResources(resources);
277
- } catch (_) {
278
- //
279
- }
292
+ updateParamsByUrl();
280
293
  }
281
- }, [setParams, projectId, initUrl, mode]);
294
+ }, [projectId, initUrl, mode, updateParamsByUrl]);
282
295
  const hasSelectedResources = useMemo(() => {
283
296
  return !!Object.keys(selectedResourceIds).find(key => {
284
297
  if (selectedResourceIds[key].length) {
@@ -0,0 +1,51 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { Box, Button, Typography } from '@mui/material';
3
+ import PropTypes from 'prop-types';
4
+ import { joinURL } from 'ufo';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ function UploadedToast({
7
+ storeUrl,
8
+ storeName,
9
+ developerDid,
10
+ published
11
+ }) {
12
+ const {
13
+ t
14
+ } = useLocaleContext();
15
+ const handleOpenUrl = () => {
16
+ if (developerDid) {
17
+ const didConnect = Buffer.from(JSON.stringify({
18
+ forceConnected: developerDid
19
+ }), 'utf8').toString('base64');
20
+ window.open(`${joinURL(storeUrl, 'developer/blocklets')}?__did-connect__=${didConnect}`);
21
+ } else {
22
+ window.open(`${joinURL(storeUrl, 'developer/blocklets')}`);
23
+ }
24
+ };
25
+ return /*#__PURE__*/_jsxs(Box, {
26
+ children: [/*#__PURE__*/_jsx(Typography, {
27
+ variant: "subtitle2",
28
+ children: t(published ? 'blocklet.publish.publishToStoreSuccess' : 'blocklet.publish.uploadToStoreSuccess', {
29
+ name: storeName
30
+ })
31
+ }), /*#__PURE__*/_jsx(Button, {
32
+ size: "small",
33
+ sx: {
34
+ mt: 1
35
+ },
36
+ onClick: handleOpenUrl,
37
+ variant: "contained",
38
+ color: "success",
39
+ children: t('common.visitTarget', {
40
+ name: storeName
41
+ })
42
+ })]
43
+ });
44
+ }
45
+ UploadedToast.propTypes = {
46
+ storeName: PropTypes.string.isRequired,
47
+ storeUrl: PropTypes.string.isRequired,
48
+ developerDid: PropTypes.string.isRequired,
49
+ published: PropTypes.bool.isRequired
50
+ };
51
+ export default UploadedToast;
@@ -1,16 +1,25 @@
1
- async function waitPromiseFunction(promiseFunction, interval = 1000, maxAttempts = 300, intervalFirst = 4000) {
2
- let attempts = 0;
3
-
1
+ const timers = {};
2
+ async function waitPromiseFunction(promiseFunction, {
3
+ interval = 1000,
4
+ maxDuration = 120 * 1000,
5
+ intervalFirst = 4000,
6
+ timerKey = ''
7
+ }) {
8
+ if (timers[timerKey]) {
9
+ clearTimeout(timers[timerKey]);
10
+ }
4
11
  // eslint-disable-next-line no-promise-executor-return
5
12
  await new Promise(resolve => setTimeout(resolve, intervalFirst));
13
+ const start = Date.now();
6
14
  const poll = async (resolve, reject) => {
7
15
  try {
8
16
  const data = await promiseFunction();
9
17
  resolve(data);
10
18
  } catch (error) {
11
- attempts++;
12
- if (attempts >= maxAttempts) {
19
+ if (Date.now() - start > maxDuration) {
13
20
  reject(error);
21
+ } else if (timerKey) {
22
+ timers[timerKey] = setTimeout(() => poll(resolve, reject), interval);
14
23
  } else {
15
24
  setTimeout(() => poll(resolve, reject), interval);
16
25
  }
@@ -38,6 +47,8 @@ export function waitGetConnectedByStudio(api, {
38
47
  throw new Error('Connected store not found');
39
48
  }
40
49
  return res.project.blockletDid;
50
+ }, {
51
+ timerKey: 'connect-studio'
41
52
  });
42
53
  }
43
54
  export function waitGetConnectedStore(api, {
@@ -60,5 +71,7 @@ export function waitGetConnectedStore(api, {
60
71
  if (!newStore) {
61
72
  throw new Error('Connected store not found');
62
73
  }
74
+ }, {
75
+ timerKey: `connect-store-${storeId}`
63
76
  });
64
77
  }
@@ -1,15 +1,22 @@
1
1
  import { WELLKNOWN_SERVICE_PATH_PREFIX } from '@abtnode/constant';
2
- import { useRef } from 'react';
3
-
4
- // `${WELLKNOWN_SERVICE_PATH_PREFIX}/open-window`
5
-
2
+ import Toast from '@arcblock/ux/lib/Toast';
3
+ import { useMemoizedFn } from 'ahooks';
4
+ import { useEffect, useRef } from 'react';
6
5
  function usePromiseWindowOpen({
6
+ messageType,
7
7
  onOpen,
8
8
  onClose
9
9
  }) {
10
10
  const windowRef = useRef(null);
11
11
  const timer = useRef(null);
12
12
  const openWindow = async fn => {
13
+ setTimeout(() => {
14
+ try {
15
+ onClose?.();
16
+ } catch (error) {
17
+ //
18
+ }
19
+ }, 10 * 1000);
13
20
  if (windowRef.current) {
14
21
  clearInterval(timer.current);
15
22
  windowRef.current.close();
@@ -38,6 +45,22 @@ function usePromiseWindowOpen({
38
45
  windowRef.current.location.href = url;
39
46
  }));
40
47
  };
48
+ const listen = useMemoizedFn(event => {
49
+ const {
50
+ type,
51
+ error
52
+ } = event.data;
53
+ if (windowRef.current && type === messageType && error) {
54
+ Toast.error(error);
55
+ onClose?.();
56
+ }
57
+ });
58
+ useEffect(() => {
59
+ window.addEventListener('message', listen);
60
+ return () => {
61
+ window.removeEventListener('message', listen);
62
+ };
63
+ }, [listen]);
41
64
  return openWindow;
42
65
  }
43
66
  export default usePromiseWindowOpen;
package/lib/locales/ar.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'وسوم',
344
344
  connectToStore: 'الاتصال بالمتجر',
345
345
  uploaded: 'تم التحميل',
346
- uploadToStore: 'تحميل إلى المتجر',
347
346
  upload: 'تحميل',
348
347
  blockletStudio: 'استوديو',
349
348
  visitStore: 'زيارة المتجر',
350
349
  reconnect: 'إعادة الاتصال',
351
350
  change: 'تغيير',
352
351
  disconnect: 'توقف',
353
- sourceApp: 'ينتمي إلى التطبيق'
352
+ sourceApp: 'ينتمي إلى التطبيق',
353
+ visitTarget: 'زيارة {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'خارجي',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'احذف {name}',
703
703
  copyInstallUrl: 'انسخ عنوان URL للتثبيت',
704
704
  install: 'تثبيت {name}',
705
- publishToStoreSuccess: 'تم نشر بلوكليت بنجاح في المتجر',
705
+ publishToStoreSuccess: 'تم نشر البلوكليت بنجاح على المتجر',
706
706
  connectStoreSuccess: 'تم الاتصال بمتجر البلوكليت بنجاح',
707
707
  uploadToStoreSuccess: 'تم تحميل بلوكليت بنجاح في المتجر ، تحتاج إلى نشره في المتجر',
708
708
  viewLastRelease: 'عرض آخر إصدار',
package/lib/locales/de.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Tags',
344
344
  connectToStore: 'Verbinden Sie mit dem Geschäft',
345
345
  uploaded: 'Hochgeladen',
346
- uploadToStore: 'Upload in den Shop',
347
346
  upload: 'Hochladen',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: 'Besuche den Laden',
350
349
  reconnect: 'Verbinden wiederherstellen',
351
350
  change: 'Ändern',
352
351
  disconnect: 'Verbindung trennen',
353
- sourceApp: 'Zur App gehörend'
352
+ sourceApp: 'Zur App gehörend',
353
+ visitTarget: 'Besuchen Sie {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Extern',
package/lib/locales/en.js CHANGED
@@ -167,7 +167,6 @@ export default {
167
167
  domain: 'Domain',
168
168
  downgradeTo: 'Downgrade to',
169
169
  download: 'Download',
170
- uploadToStore: 'Upload to Store',
171
170
  connectToStore: 'Connect to Store',
172
171
  blockletStudio: 'Studio',
173
172
  uploaded: 'Uploaded',
@@ -244,6 +243,7 @@ export default {
244
243
  notification: 'Notification',
245
244
  open: 'Open',
246
245
  visitStore: 'Visit Store',
246
+ visitTarget: 'Visit {name}',
247
247
  management: 'Management',
248
248
  os: 'Operating System',
249
249
  overview: 'Overview',
package/lib/locales/es.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Etiquetas',
344
344
  connectToStore: 'Conectar a la tienda',
345
345
  uploaded: 'Subido',
346
- uploadToStore: 'Subir a la tienda',
347
346
  upload: 'Subir',
348
347
  blockletStudio: 'Estudio',
349
348
  visitStore: 'Visitar tienda',
350
349
  reconnect: 'Reconecta',
351
350
  change: 'Cambiar',
352
351
  disconnect: 'Desconectar',
353
- sourceApp: 'Pertenece a la aplicación'
352
+ sourceApp: 'Pertenece a la aplicación',
353
+ visitTarget: 'Visita {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Externo',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'Eliminar {name}',
703
703
  copyInstallUrl: 'Copiar URL de instalación',
704
704
  install: 'Instalar {name}',
705
- publishToStoreSuccess: 'Bloque publicado en la tienda exitosamente',
705
+ publishToStoreSuccess: 'Blocklet publicado en la tienda con éxito',
706
706
  connectStoreSuccess: 'La tienda de Blocklet se conectó correctamente',
707
707
  uploadToStoreSuccess: 'Bloque de carga a la tienda exitosamente, necesitas publicarlo en la tienda',
708
708
  viewLastRelease: 'Ver última versión',
package/lib/locales/fr.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Étiquettes',
344
344
  connectToStore: 'Se connecter au magasin',
345
345
  uploaded: 'Téléchargé',
346
- uploadToStore: 'Télécharger vers le magasin',
347
346
  upload: 'Télécharger',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: 'Visiter le magasin',
350
349
  reconnect: 'Reconnecter',
351
350
  change: 'Changer',
352
351
  disconnect: 'Déconnecter',
353
- sourceApp: "Appartient à l'application"
352
+ sourceApp: "Appartient à l'application",
353
+ visitTarget: 'Visitez {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Externe',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'Supprimez {name}',
703
703
  copyInstallUrl: "Copier l'URL d'installation",
704
704
  install: 'Installer {name}',
705
- publishToStoreSuccess: 'Blocklet publié avec succès dans le magasin',
705
+ publishToStoreSuccess: 'Blocklet publié avec succès sur le Store',
706
706
  connectStoreSuccess: 'Connexion réussie au Blocklet Store',
707
707
  uploadToStoreSuccess: 'Blocklet téléchargé avec succès dans le Store, vous devez le publier dans le Store',
708
708
  viewLastRelease: 'Voir la dernière version',
package/lib/locales/hi.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'टैग्स',
344
344
  connectToStore: 'स्टोर से जुड़ें',
345
345
  uploaded: 'अपलोड किया गया',
346
- uploadToStore: 'स्टोर में अपलोड करें',
347
346
  upload: 'अपलोड करें',
348
347
  blockletStudio: 'स्टूडियो',
349
348
  visitStore: 'स्टोर को देखें',
350
349
  reconnect: 'पुनः कनेक्ट करें',
351
350
  change: 'परिवर्तन',
352
351
  disconnect: 'डिस्कनेक्ट करें',
353
- sourceApp: 'ऐप से संबद्ध'
352
+ sourceApp: 'ऐप से संबद्ध',
353
+ visitTarget: '{name} का दौरा करें'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'बाहरी',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: '{नाम} को हटाएं',
703
703
  copyInstallUrl: 'संपादित स्थापित URL की प्रतिलिपि',
704
704
  install: '{name} स्थापित करें',
705
- publishToStoreSuccess: 'सफलतापूर्वक स्टोर में ब्लॉकलेट प्रकाशित',
705
+ publishToStoreSuccess: 'ब्लॉकलेट सफलतापूर्वक स्टोर पर प्रकाशित किया गया',
706
706
  connectStoreSuccess: 'ब्लॉकलेट स्टोर सफलतापूर्वक कनेक्ट हो गया',
707
707
  uploadToStoreSuccess: 'ब्लॉकलेट को स्टोर में सफलतापूर्वक अपलोड किया गया है, आपको इसे स्टोर में प्रकाशित करने की आवश्यकता है',
708
708
  viewLastRelease: 'अंतिम रिलीज़ देखें',
Binary file
package/lib/locales/id.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Tags',
344
344
  connectToStore: 'Terhubung ke Toko',
345
345
  uploaded: 'Diunggah',
346
- uploadToStore: 'Unggah ke Toko',
347
346
  upload: 'Unggah',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: 'Kunjungi Toko',
350
349
  reconnect: 'Menghubungkan kembali',
351
350
  change: 'Perubahan',
352
351
  disconnect: 'Putuskan Sambungan',
353
- sourceApp: 'Milik aplikasi'
352
+ sourceApp: 'Milik aplikasi',
353
+ visitTarget: 'Kunjungi {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Eksternal',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'Hapus {name}',
703
703
  copyInstallUrl: 'Salin URL Instalasi',
704
704
  install: 'Pasang {name}',
705
- publishToStoreSuccess: 'Blocklet berhasil dipublikasikan ke Store',
705
+ publishToStoreSuccess: 'Blocklet berhasil diterbitkan ke Toko',
706
706
  connectStoreSuccess: 'Penyimpanan Blocklet berhasil terhubung',
707
707
  uploadToStoreSuccess: 'Blocklet berhasil diunggah ke Store, Anda perlu mempublikasikannya di Store',
708
708
  viewLastRelease: 'Tampilkan rilis terakhir',
package/lib/locales/ja.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'タグ',
344
344
  connectToStore: 'ストアに接続する',
345
345
  uploaded: 'アップロードされました',
346
- uploadToStore: 'ストアにアップロード',
347
346
  upload: 'アップロード',
348
347
  blockletStudio: 'スタジオ',
349
348
  visitStore: '店を訪れる',
350
349
  reconnect: '再接続する',
351
350
  change: '変更',
352
351
  disconnect: '接続を切る',
353
- sourceApp: 'このアプリに所属'
352
+ sourceApp: 'このアプリに所属',
353
+ visitTarget: '訪問{name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: '外部',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: '削除 {name}',
703
703
  copyInstallUrl: 'インストールURLをコピーする',
704
704
  install: '{name}をインストールする',
705
- publishToStoreSuccess: 'ブロックレットが正常にストアに公開されました',
705
+ publishToStoreSuccess: 'Blockletがストアに正常に公開されました',
706
706
  connectStoreSuccess: 'Blockletストアが正常に接続されました',
707
707
  uploadToStoreSuccess: 'ブロックレットがストアに正常にアップロードされました。ストアで公開する必要があります',
708
708
  viewLastRelease: '最新リリースを表示する',
package/lib/locales/ko.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: '태그',
344
344
  connectToStore: '상점에 연결하기',
345
345
  uploaded: '업로드되었습니다',
346
- uploadToStore: '스토어에 업로드',
347
346
  upload: '업로드',
348
347
  blockletStudio: '스튜디오',
349
348
  visitStore: '가게 방문하기',
350
349
  reconnect: '재연결',
351
350
  change: '변경',
352
351
  disconnect: '연결 끊기',
353
- sourceApp: '앱에 속함'
352
+ sourceApp: '앱에 속함',
353
+ visitTarget: '{name}를 방문하다'
354
354
  },
355
355
  blocklet: {
356
356
  external: '외부의',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: '{name} 삭제',
703
703
  copyInstallUrl: '설치 URL 복사하기',
704
704
  install: '{name}을(를) 설치하세요',
705
- publishToStoreSuccess: 'Store에 블록릿 성공적으로 발행됐습니다',
705
+ publishToStoreSuccess: 'Store에 성공적으로 발행된 Blocklet',
706
706
  connectStoreSuccess: '블록렛 스토어가 성공적으로 연결되었습니다',
707
707
  uploadToStoreSuccess: '블록렛이 성공적으로 스토어에 업로드되었습니다. 스토어에서 게시해야 합니다',
708
708
  viewLastRelease: '최신 릴리스 보기',
package/lib/locales/pt.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Tags',
344
344
  connectToStore: 'Conectar à Loja',
345
345
  uploaded: 'Carregado',
346
- uploadToStore: 'Enviar para a Loja',
347
346
  upload: 'Upload',
348
347
  blockletStudio: 'Estúdio',
349
348
  visitStore: 'Visite a loja',
350
349
  reconnect: 'Reconectar',
351
350
  change: 'Mudança',
352
351
  disconnect: 'Desconectar',
353
- sourceApp: 'Pertence ao app'
352
+ sourceApp: 'Pertence ao app',
353
+ visitTarget: 'Visite {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Externo',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'Excluir {name}',
703
703
  copyInstallUrl: 'Copiar URL de instalação',
704
704
  install: 'Instale {name}',
705
- publishToStoreSuccess: 'Blocklet publicado na loja com sucesso',
705
+ publishToStoreSuccess: 'Blocklet publicado na Loja com sucesso',
706
706
  connectStoreSuccess: 'Loja de Blocos conectada com sucesso',
707
707
  uploadToStoreSuccess: 'Blocklet enviado para a Store com sucesso, você precisa publicá-lo na Store',
708
708
  viewLastRelease: 'Visualizar última versão',
package/lib/locales/ru.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Метки',
344
344
  connectToStore: 'Подключитесь к магазину',
345
345
  uploaded: 'Загружено',
346
- uploadToStore: 'Загрузить в магазин',
347
346
  upload: 'Загрузить',
348
347
  blockletStudio: 'Студия',
349
348
  visitStore: 'Посетите магазин',
350
349
  reconnect: 'Восстановить соединение',
351
350
  change: 'Изменение',
352
351
  disconnect: 'Отсоединить',
353
- sourceApp: 'Принадлежит приложению'
352
+ sourceApp: 'Принадлежит приложению',
353
+ visitTarget: 'Посетите {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Внешний',
package/lib/locales/th.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'แท็ก',
344
344
  connectToStore: 'เชื่อมต่อกับร้านค้า',
345
345
  uploaded: 'อัปโหลดแล้ว',
346
- uploadToStore: 'อัปโหลดไปยังร้านค้า',
347
346
  upload: 'อัปโหลด',
348
347
  blockletStudio: 'สตูดิโอ',
349
348
  visitStore: 'เยี่ยมชมร้านค้า',
350
349
  reconnect: 'เชื่อมต่อใหม่',
351
350
  change: 'เปลี่ยนแปลง',
352
351
  disconnect: 'ตัดการเชื่อมต่อ',
353
- sourceApp: 'เป็นของแอป'
352
+ sourceApp: 'เป็นของแอป',
353
+ visitTarget: 'เข้าชม {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'ภายนอก',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'ลบ {name}',
703
703
  copyInstallUrl: 'คัดลอก URL การติดตั้ง',
704
704
  install: 'ติดตั้ง {name}',
705
- publishToStoreSuccess: 'Blocklet ได้เผยแพร่ในร้านค้าเรียบร้อยแล้ว',
705
+ publishToStoreSuccess: 'Blocklet ได้รับการเผยแพร่ในร้านค้าเรียบร้อยแล้ว',
706
706
  connectStoreSuccess: 'เชื่อมต่อ Blocklet Store สำเร็จ',
707
707
  uploadToStoreSuccess: 'อัพโหลด Blocklet เข้าสู่ Store สำเร็จแล้ว คุณต้องเผยแพร่ในร้านค้า',
708
708
  viewLastRelease: 'ดูรายการอัพเดตล่าสุด',
package/lib/locales/vi.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: 'Tags',
344
344
  connectToStore: 'Kết nối tới Cửa hàng',
345
345
  uploaded: 'Đã tải lên',
346
- uploadToStore: 'Tải lên Cửa hàng',
347
346
  upload: 'Tải lên',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: 'Ghé cửa hàng',
350
349
  reconnect: 'Kết nối lại',
351
350
  change: 'Thay đổi',
352
351
  disconnect: 'Ngắt kết nối',
353
- sourceApp: 'Thuộc về ứng dụng'
352
+ sourceApp: 'Thuộc về ứng dụng',
353
+ visitTarget: 'Ghé thăm {name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: 'Bên ngoài',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: 'Xóa {name}',
703
703
  copyInstallUrl: 'Sao chép URL cài đặt',
704
704
  install: 'Cài đặt {name}',
705
- publishToStoreSuccess: 'Blocklet đã được xuất bản vào cửa hàng thành công',
705
+ publishToStoreSuccess: 'Blocklet đã được xuất bản lên Cửa hàng thành công',
706
706
  connectStoreSuccess: 'Kết nối Blocklet Store thành công',
707
707
  uploadToStoreSuccess: 'Blocklet đã tải lên Store thành công, bạn cần phải xuất bản nó trong Store',
708
708
  viewLastRelease: 'Xem phiên bản phát hành gần đây nhất',
@@ -343,14 +343,14 @@ export default {
343
343
  tags: '標籤',
344
344
  connectToStore: '連接至商店',
345
345
  uploaded: '已上傳',
346
- uploadToStore: '上傳至 Store',
347
346
  upload: '上傳',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: '訪問 Store',
350
349
  reconnect: '重新連接',
351
350
  change: '更改',
352
351
  disconnect: '斷開連線',
353
- sourceApp: '屬於此 App'
352
+ sourceApp: '屬於此 App',
353
+ visitTarget: '拜訪{name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: '外部的',
@@ -702,7 +702,7 @@ export default {
702
702
  delete: '刪除 {name}',
703
703
  copyInstallUrl: '複製安裝連結',
704
704
  install: '安裝{name}',
705
- publishToStoreSuccess: '成功發佈到 Store 的區塊鏈',
705
+ publishToStoreSuccess: '成功發佈到商店的Blocklet',
706
706
  connectStoreSuccess: 'Store 連線成功',
707
707
  uploadToStoreSuccess: 'Blocklet 成功上傳至 Store,請在 Store 中發布',
708
708
  viewLastRelease: '查看最新版本',
package/lib/locales/zh.js CHANGED
@@ -343,14 +343,14 @@ export default {
343
343
  tags: '标签',
344
344
  connectToStore: '连接 Store',
345
345
  uploaded: '已上传',
346
- uploadToStore: '上传到 Store',
347
346
  upload: '上传',
348
347
  blockletStudio: 'Studio',
349
348
  visitStore: '访问 Store',
350
349
  reconnect: '重新连接',
351
350
  change: '更改',
352
351
  sourceApp: '所属应用',
353
- disconnect: '断开连接'
352
+ disconnect: '断开连接',
353
+ visitTarget: '访问{name}'
354
354
  },
355
355
  blocklet: {
356
356
  external: '外部',
@@ -704,7 +704,7 @@ export default {
704
704
  delete: '删除 {name}',
705
705
  copyInstallUrl: '复制安装链接',
706
706
  install: '安装 {name}',
707
- publishToStoreSuccess: '成功发布 Blocklet 到 Store',
707
+ publishToStoreSuccess: '成功发布到商店的Blocklet',
708
708
  connectStoreSuccess: 'Blocklet 成功连接 Store',
709
709
  uploadToStoreSuccess: 'Blocklet 成功上传至 Store,请在 Store 中发布',
710
710
  viewLastRelease: '查看最新版本',
package/lib/store/item.js CHANGED
@@ -16,6 +16,7 @@ import ConnectActions from './connect-actions';
16
16
  import DidAddress from '../did-address';
17
17
  import usePromiseWindowOpen from '../hooks/use-promise-window-open';
18
18
  import DeveloperAvatar from './developer-avatar';
19
+ import UploadedToast from '../blocklet/publish/create-release/uploaded-toast';
19
20
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
21
  export const BEHAVIOR = {
21
22
  CONNECT: 'connect',
@@ -115,6 +116,7 @@ export default function StoreItem({
115
116
  } = useNodeContext();
116
117
  const [loading, setLoading] = useState(false);
117
118
  const openWindow = usePromiseWindowOpen({
119
+ messageType: 'connect-store-message',
118
120
  onOpen: () => setLoading(true),
119
121
  onClose: () => setLoading(false)
120
122
  });
@@ -158,7 +160,6 @@ export default function StoreItem({
158
160
  } catch (err) {
159
161
  const error = formatError(err);
160
162
  Toast.error(error);
161
- newWindow.document.write(error);
162
163
  setLoading(false);
163
164
  }
164
165
  });
@@ -190,11 +191,14 @@ export default function StoreItem({
190
191
  type: releaseType
191
192
  }
192
193
  }).then(res => {
193
- if (res.url === 'uploaded') {
194
- Toast.success(t('blocklet.publish.uploadToStoreSuccess'));
195
- } else if (res.url === 'published') {
196
- Toast.success(t('blocklet.publish.publishToStoreSuccess'));
197
- }
194
+ Toast.success( /*#__PURE__*/_jsx(UploadedToast, {
195
+ storeName: connectedStore.storeName,
196
+ storeUrl: connectedStore.storeUrl,
197
+ developerDid: connectedStore.developerDid,
198
+ published: res.url === 'published'
199
+ }), {
200
+ duration: 10000
201
+ });
198
202
  onPublish?.(null);
199
203
  }).catch(err => {
200
204
  Toast.error(formatError(err));
@@ -386,6 +390,7 @@ StoreItem.propTypes = {
386
390
  teamDid: PropTypes.string.isRequired,
387
391
  published: PropTypes.bool,
388
392
  connectedStore: PropTypes.shape({
393
+ storeName: PropTypes.string,
389
394
  storeId: PropTypes.string,
390
395
  storeUrl: PropTypes.string,
391
396
  developerDid: PropTypes.string,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abtnode/ux",
3
- "version": "1.16.29-beta-924d4db7",
3
+ "version": "1.16.29-beta-87e06e1c",
4
4
  "description": "UX components shared across abtnode packages",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -25,11 +25,11 @@
25
25
  "author": "linchen <linchen1987@foxmail.com> (http://github.com/linchen1987)",
26
26
  "license": "Apache-2.0",
27
27
  "dependencies": {
28
- "@abtnode/auth": "1.16.29-beta-924d4db7",
29
- "@abtnode/constant": "1.16.29-beta-924d4db7",
30
- "@abtnode/util": "1.16.29-beta-924d4db7",
28
+ "@abtnode/auth": "1.16.29-beta-87e06e1c",
29
+ "@abtnode/constant": "1.16.29-beta-87e06e1c",
30
+ "@abtnode/util": "1.16.29-beta-87e06e1c",
31
31
  "@ahooksjs/use-url-state": "^3.5.1",
32
- "@arcblock/did": "^1.18.124",
32
+ "@arcblock/did": "^1.18.126",
33
33
  "@arcblock/did-connect": "^2.10.3",
34
34
  "@arcblock/did-motif": "^1.1.13",
35
35
  "@arcblock/icons": "^2.10.3",
@@ -37,11 +37,11 @@
37
37
  "@arcblock/react-hooks": "^2.10.3",
38
38
  "@arcblock/terminal": "^2.10.3",
39
39
  "@arcblock/ux": "^2.10.3",
40
- "@blocklet/constant": "1.16.29-beta-924d4db7",
41
- "@blocklet/js-sdk": "1.16.29-beta-924d4db7",
42
- "@blocklet/launcher-layout": "2.3.27",
43
- "@blocklet/list": "^0.13.6",
44
- "@blocklet/meta": "1.16.29-beta-924d4db7",
40
+ "@blocklet/constant": "1.16.29-beta-87e06e1c",
41
+ "@blocklet/js-sdk": "1.16.29-beta-87e06e1c",
42
+ "@blocklet/launcher-layout": "2.3.28",
43
+ "@blocklet/list": "^0.13.8",
44
+ "@blocklet/meta": "1.16.29-beta-87e06e1c",
45
45
  "@blocklet/ui-react": "^2.10.3",
46
46
  "@blocklet/uploader": "0.1.19",
47
47
  "@emotion/react": "^11.10.4",
@@ -56,7 +56,7 @@
56
56
  "@mui/styles": "^5.15.11",
57
57
  "@mui/x-date-pickers": "^6.19.0",
58
58
  "@mui/x-tree-view": "^6.17.0",
59
- "@ocap/client": "1.18.124",
59
+ "@ocap/client": "1.18.126",
60
60
  "@uiw/react-markdown-preview": "^5.1.1",
61
61
  "ahooks": "^3.7.8",
62
62
  "axios": "^1.7.2",
@@ -108,5 +108,5 @@
108
108
  "jest": "^29.7.0",
109
109
  "jest-environment-jsdom": "^29.7.0"
110
110
  },
111
- "gitHead": "8fc6562d1a2c77f028be9704027b516053504096"
111
+ "gitHead": "e6a32801bc392566448d4df00c2ae68717f39822"
112
112
  }