@amityco/ts-sdk 6.34.0 → 6.34.1-cb91336.0
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/.env +26 -26
- package/dist/index.cjs.js +101 -4
- package/dist/index.esm.js +101 -4
- package/dist/index.umd.js +1 -1
- package/dist/storyRepository/api/createImageStory.d.ts.map +1 -1
- package/dist/storyRepository/api/createVideoStory.d.ts.map +1 -1
- package/dist/storyRepository/internalApi/deleteStory.d.ts.map +1 -1
- package/dist/storyRepository/observers/getActiveStoriesByTarget.d.ts.map +1 -1
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -1
- package/dist/storyRepository/utils/createOptimisticTarget.d.ts +5 -0
- package/dist/storyRepository/utils/createOptimisticTarget.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/storyRepository/api/createImageStory.ts +3 -0
- package/src/storyRepository/api/createVideoStory.ts +3 -0
- package/src/storyRepository/internalApi/deleteStory.ts +74 -0
- package/src/storyRepository/observers/getActiveStoriesByTarget.ts +16 -1
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +14 -2
- package/src/storyRepository/utils/StoryComputedValue.ts +2 -2
- package/src/storyRepository/utils/createOptimisticTarget.ts +46 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createImageStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/api/createImageStory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createImageStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/api/createImageStory.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,eACf,MAAM,aAAa,CAAC,YAAY,CAAC,YACnC,MAAM,aAAa,CAAC,UAAU,CAAC,YAC/B,QAAQ,aACR,MAAM,QAAQ,qBACN,MAAM,gBAAgB,UACjC,MAAM,SAAS,EAAE,KACvB,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,CA6E/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createVideoStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/api/createVideoStory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createVideoStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/api/createVideoStory.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,gBAAgB,eACf,MAAM,aAAa,CAAC,YAAY,CAAC,YACnC,MAAM,aAAa,CAAC,UAAU,CAAC,YAC/B,QAAQ,aACR,MAAM,QAAQ,UACjB,MAAM,SAAS,EAAE,KACvB,QAAQ,MAAM,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,CA4E/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/internalApi/deleteStory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deleteStory.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/internalApi/deleteStory.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,YACb,MAAM,KAAK,CAAC,SAAS,CAAC,0BAE9B,QAAQ,OAAO,CAmGjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActiveStoriesByTarget.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/observers/getActiveStoriesByTarget.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getActiveStoriesByTarget.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/observers/getActiveStoriesByTarget.ts"],"names":[],"mappings":"AA8BA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,wBAAwB,WAC3B,MAAM,uBAAuB,YAC3B,MAAM,sBAAsB,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,eA6LhE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalStoryLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAU1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AASxE,qBAAa,mCAAoC,SAAQ,wBAAwB,CAC/E,iBAAiB,EACjB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,WAAW,EACjB,yBAAyB,CAC1B;IACC,OAAO,CAAC,qBAAqB,CAAmC;IAEhE,OAAO,CAAC,KAAK,CAAyB;gBAGpC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAC7B,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;IA0B3D,SAAS,CAAC,KAAK;IAUf,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB;IAI7D,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"GlobalStoryLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAU1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AASxE,qBAAa,mCAAoC,SAAQ,wBAAwB,CAC/E,iBAAiB,EACjB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,WAAW,EACjB,yBAAyB,CAC1B;IACC,OAAO,CAAC,qBAAqB,CAAmC;IAEhE,OAAO,CAAC,KAAK,CAAyB;gBAGpC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAC7B,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;IA0B3D,SAAS,CAAC,KAAK;IAUf,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB;IAI7D,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAyCzE,OAAO,CAAC,WAAW;IAkCnB,iBAAiB;CAalB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOptimisticTarget.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/utils/createOptimisticTarget.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB;gBAIrB,MAAM;cACR,MAAM;mBAmCjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -6,6 +6,7 @@ import { LinkedObject } from '~/utils/linkedObject';
|
|
|
6
6
|
import { pushToCache } from '~/cache/api';
|
|
7
7
|
import { STORY_KEY_CACHE } from '~/storyRepository/constants';
|
|
8
8
|
import { createStory } from '../internalApi/createStory';
|
|
9
|
+
import { createOptimisticTarget } from '../utils/createOptimisticTarget';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* ```js
|
|
@@ -79,6 +80,8 @@ export const createImageStory = async (
|
|
|
79
80
|
},
|
|
80
81
|
};
|
|
81
82
|
|
|
83
|
+
createOptimisticTarget({ targetId, targetType });
|
|
84
|
+
|
|
82
85
|
// Fire optimistic event - update fileId
|
|
83
86
|
createOptimisticEvent({ payload, formData }, optimisticData => {
|
|
84
87
|
fireEvent('local.story.created', optimisticData);
|
|
@@ -7,6 +7,7 @@ import { LinkedObject } from '~/utils/linkedObject';
|
|
|
7
7
|
import { pushToCache } from '~/cache/api';
|
|
8
8
|
import { STORY_KEY_CACHE } from '~/storyRepository/constants';
|
|
9
9
|
import { createStory } from '../internalApi/createStory';
|
|
10
|
+
import { createOptimisticTarget } from '../utils/createOptimisticTarget';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* ```js
|
|
@@ -56,6 +57,8 @@ export const createVideoStory = async (
|
|
|
56
57
|
new Date(date.setFullYear(date.getFullYear() + 1)),
|
|
57
58
|
);
|
|
58
59
|
|
|
60
|
+
createOptimisticTarget({ targetId, targetType });
|
|
61
|
+
|
|
59
62
|
// Fire optimistic event
|
|
60
63
|
createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
|
|
61
64
|
fireEvent('local.story.created', optimisticData);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { getActiveClient } from '~/client';
|
|
2
2
|
import { fireEvent } from '~/core/events';
|
|
3
3
|
import { getStoryCache } from '../utils/getStoryCache';
|
|
4
|
+
import { dropFromCache, pullFromCache, pushToCache, queryCache } from '~/cache/api';
|
|
5
|
+
import { STORY_KEY_CACHE } from '../constants';
|
|
4
6
|
|
|
5
7
|
export const deleteStory = async (
|
|
6
8
|
storyId: Amity.Story['storyId'],
|
|
@@ -24,6 +26,78 @@ export const deleteStory = async (
|
|
|
24
26
|
users: [],
|
|
25
27
|
stories: [{ ...data, isDeleted: true }],
|
|
26
28
|
});
|
|
29
|
+
|
|
30
|
+
/* ------ Unsynced story case ------ */
|
|
31
|
+
if (data.syncState !== Amity.SyncState.Synced) {
|
|
32
|
+
if (permanent) {
|
|
33
|
+
dropFromCache([STORY_KEY_CACHE.STORY, 'get', storyId]);
|
|
34
|
+
} else {
|
|
35
|
+
pushToCache([STORY_KEY_CACHE.STORY, 'get', storyId], { ...cached.data, isDeleted: true });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const unsyncedStoriesCache = queryCache<Amity.InternalStory>([
|
|
39
|
+
STORY_KEY_CACHE.STORY,
|
|
40
|
+
'get',
|
|
41
|
+
])?.filter(
|
|
42
|
+
story =>
|
|
43
|
+
story.data.syncState !== Amity.SyncState.Synced &&
|
|
44
|
+
story.data.targetId === data.targetId &&
|
|
45
|
+
story.data.isDeleted !== true,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// update localLastStoryExpiresAt to be the last story expires
|
|
49
|
+
|
|
50
|
+
if (unsyncedStoriesCache && unsyncedStoriesCache.length > 0) {
|
|
51
|
+
const lastStoryExpires = unsyncedStoriesCache.reduce((acc, story) => {
|
|
52
|
+
const expireAt = new Date(story.data.expiresAt || 0);
|
|
53
|
+
return expireAt > acc ? expireAt : acc;
|
|
54
|
+
}, new Date(0));
|
|
55
|
+
|
|
56
|
+
pushToCache(
|
|
57
|
+
[STORY_KEY_CACHE.EXPIRE, cached.data.targetId],
|
|
58
|
+
lastStoryExpires.toISOString(),
|
|
59
|
+
);
|
|
60
|
+
} else {
|
|
61
|
+
// if no unsynced stories, remove last story expires since there is no more story
|
|
62
|
+
dropFromCache([STORY_KEY_CACHE.EXPIRE, cached.data.targetId]);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* ------ Synced story case ------ */
|
|
69
|
+
const targetCache = pullFromCache<Amity.RawStoryTarget>([
|
|
70
|
+
STORY_KEY_CACHE.STORY_TARGET,
|
|
71
|
+
'get',
|
|
72
|
+
data.targetId,
|
|
73
|
+
])?.data;
|
|
74
|
+
|
|
75
|
+
const syncedStoriesCache = queryCache<Amity.InternalStory>([
|
|
76
|
+
STORY_KEY_CACHE.STORY,
|
|
77
|
+
'get',
|
|
78
|
+
])?.filter(
|
|
79
|
+
story =>
|
|
80
|
+
story.data.syncState === Amity.SyncState.Synced &&
|
|
81
|
+
story.data.targetId === data.targetId &&
|
|
82
|
+
story.data.isDeleted !== true,
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
let lastStoryExpiresAt;
|
|
86
|
+
|
|
87
|
+
if (syncedStoriesCache && syncedStoriesCache.length > 0) {
|
|
88
|
+
lastStoryExpiresAt = syncedStoriesCache?.reduce((acc, story) => {
|
|
89
|
+
const expireAt = new Date(story.data.expiresAt || 0);
|
|
90
|
+
return expireAt > acc ? expireAt : acc;
|
|
91
|
+
}, new Date(0));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// update lastStoryExpiresAt from lastest synced story
|
|
95
|
+
if (targetCache) {
|
|
96
|
+
pushToCache([STORY_KEY_CACHE.STORY_TARGET, 'get', data.targetId], {
|
|
97
|
+
...targetCache,
|
|
98
|
+
lastStoryExpiresAt,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
27
101
|
}
|
|
28
102
|
}
|
|
29
103
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getActiveClient } from '~/client';
|
|
2
2
|
import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
|
|
3
|
-
import { dropFromCache, pullFromCache, pushToCache } from '~/cache/api';
|
|
3
|
+
import { dropFromCache, pullFromCache, pushToCache, queryCache } from '~/cache/api';
|
|
4
4
|
import {
|
|
5
5
|
createQuery,
|
|
6
6
|
runQuery,
|
|
@@ -26,6 +26,7 @@ import { onStoryCreated, onStoryCreatedLocal } from '../events/onStoryCreated';
|
|
|
26
26
|
import { onStoryDeleted, onStoryDeletedLocal } from '../events/onStoryDeleted';
|
|
27
27
|
import { onStoryError } from '../events/onStoryError';
|
|
28
28
|
import { onStoryLocalDataUpdated } from '../events/onStoryLocalDataUpdated';
|
|
29
|
+
import { STORY_KEY_CACHE } from '../constants';
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* ```js
|
|
@@ -162,6 +163,20 @@ export const getActiveStoriesByTarget = (
|
|
|
162
163
|
}
|
|
163
164
|
}
|
|
164
165
|
|
|
166
|
+
const unSyncedStories = queryCache<Amity.InternalStory>([STORY_KEY_CACHE.STORY, 'get'])
|
|
167
|
+
?.filter(
|
|
168
|
+
story =>
|
|
169
|
+
story.data.targetId === params.targetId &&
|
|
170
|
+
story.data.syncState !== Amity.SyncState.Synced,
|
|
171
|
+
)
|
|
172
|
+
.map(story => getResolver('story')(story.data));
|
|
173
|
+
|
|
174
|
+
if (unSyncedStories && unSyncedStories?.length > 0) {
|
|
175
|
+
unSyncedStories.forEach(referenceId => {
|
|
176
|
+
if (!data.data.includes(referenceId)) data.data.push(referenceId);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
165
180
|
pushToCache(cacheKey, data.data);
|
|
166
181
|
|
|
167
182
|
responder(data);
|
package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import hash from 'object-hash';
|
|
2
2
|
import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
|
|
3
|
-
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
3
|
+
import { pullFromCache, pushToCache, queryCache } from '~/cache/api';
|
|
4
4
|
import { LinkedObject } from '~/utils/linkedObject';
|
|
5
5
|
import { STORY_KEY_CACHE } from '~/storyRepository/constants';
|
|
6
6
|
import { sortByLocalSortingDate } from '~/core/query';
|
|
@@ -82,7 +82,17 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
82
82
|
const collection = pullFromCache<Amity.StoryTargetLiveCollectionCache>(this.cacheKey)?.data;
|
|
83
83
|
if (!collection) return;
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
const targetIds = collection.data;
|
|
86
|
+
|
|
87
|
+
const cachedTargets = queryCache<Amity.RawStoryTarget>([STORY_KEY_CACHE.STORY_TARGET]);
|
|
88
|
+
|
|
89
|
+
if (cachedTargets && cachedTargets?.length > 0) {
|
|
90
|
+
cachedTargets?.forEach(({ key }) => {
|
|
91
|
+
if (!collection.data.includes(key[2] as string)) targetIds.push(key[2] as string);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let data = targetIds
|
|
86
96
|
.map(
|
|
87
97
|
targetId =>
|
|
88
98
|
pullFromCache<Amity.RawStoryTarget>([STORY_KEY_CACHE.STORY_TARGET, 'get', targetId])!,
|
|
@@ -93,6 +103,8 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
93
103
|
if (!this.shouldNotify(data) && origin === 'event') return;
|
|
94
104
|
|
|
95
105
|
data = this.applyFilter(data)
|
|
106
|
+
// exclude story targets with invalid stories
|
|
107
|
+
.filter(({ localSortingDate }) => !!localSortingDate)
|
|
96
108
|
// Remove internal fields
|
|
97
109
|
.map(
|
|
98
110
|
({ localFilter, localLastExpires, localLastSeen, localSortingDate, ...rest }) => rest,
|
|
@@ -106,10 +106,10 @@ export class StoryComputedValue {
|
|
|
106
106
|
const groupByType = stories.reduce(
|
|
107
107
|
(acc, story) => {
|
|
108
108
|
const {
|
|
109
|
-
data: { targetId, syncState },
|
|
109
|
+
data: { targetId, syncState, isDeleted },
|
|
110
110
|
} = story;
|
|
111
111
|
|
|
112
|
-
if (targetId === this._targetId) {
|
|
112
|
+
if (targetId === this._targetId && !isDeleted) {
|
|
113
113
|
acc[syncState!] += 1;
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
2
|
+
import { getUser } from '~/userRepository/internalApi/getUser';
|
|
3
|
+
import { getCommunity } from '~/communityRepository/api/getCommunity';
|
|
4
|
+
import { STORY_KEY_CACHE } from '../constants';
|
|
5
|
+
|
|
6
|
+
export const createOptimisticTarget = async ({
|
|
7
|
+
targetId,
|
|
8
|
+
targetType,
|
|
9
|
+
}: {
|
|
10
|
+
targetType: string;
|
|
11
|
+
targetId: string;
|
|
12
|
+
}) => {
|
|
13
|
+
const targetCache = pullFromCache<Amity.RawStoryTarget>([
|
|
14
|
+
STORY_KEY_CACHE.STORY_TARGET,
|
|
15
|
+
'get',
|
|
16
|
+
targetId,
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
if (!targetCache) {
|
|
20
|
+
let optimisticTarget = {
|
|
21
|
+
targetId,
|
|
22
|
+
targetType,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
if (targetType === 'community') {
|
|
26
|
+
const community = await getCommunity(targetId);
|
|
27
|
+
optimisticTarget = {
|
|
28
|
+
...optimisticTarget,
|
|
29
|
+
targetPublicId: community.data.communityId,
|
|
30
|
+
targetUpdatedAt: community.data.updatedAt ?? new Date().toISOString(),
|
|
31
|
+
} as Amity.RawStoryTarget;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (targetType === 'user') {
|
|
35
|
+
const user = await getUser(targetId);
|
|
36
|
+
|
|
37
|
+
optimisticTarget = {
|
|
38
|
+
...optimisticTarget,
|
|
39
|
+
targetPublicId: user.data.userPublicId,
|
|
40
|
+
targetUpdatedAt: user.data.updatedAt ?? new Date().toISOString(),
|
|
41
|
+
} as Amity.RawStoryTarget;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
pushToCache([STORY_KEY_CACHE.STORY_TARGET, 'get', targetId], optimisticTarget);
|
|
45
|
+
}
|
|
46
|
+
};
|