Commits

Art Lowel authored a4a747e922b
fix issue where the submission form wouldn't update after a relationship was added
No tags

src/app/core/shared/operators.ts

Modified
38 38 (source: Observable<RequestEntry>): Observable<ResponseState> =>
39 39 source.pipe(
40 40 filter((entry: RequestEntry) => hasValue(entry) && hasValue(entry.response)),
41 41 map((entry: RequestEntry) => entry.response)
42 42 );
43 43
44 44 export const sendRequest = (requestService: RequestService) =>
45 45 (source: Observable<RestRequest>): Observable<RestRequest> =>
46 46 source.pipe(tap((request: RestRequest) => requestService.send(request)));
47 47
48 -export const getRemoteDataPayload = () =>
49 - <T>(source: Observable<RemoteData<T>>): Observable<T> =>
48 +export const getRemoteDataPayload = <T>() =>
49 + (source: Observable<RemoteData<T>>): Observable<T> =>
50 50 source.pipe(map((remoteData: RemoteData<T>) => remoteData.payload));
51 51
52 -export const getPaginatedListPayload = () =>
53 - <T>(source: Observable<PaginatedList<T>>): Observable<T[]> =>
52 +export const getPaginatedListPayload = <T>() =>
53 + (source: Observable<PaginatedList<T>>): Observable<T[]> =>
54 54 source.pipe(map((list: PaginatedList<T>) => list.page));
55 55
56 -export const getAllCompletedRemoteData = () =>
57 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
56 +export const getAllCompletedRemoteData = <T>() =>
57 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
58 58 source.pipe(filter((rd: RemoteData<T>) => hasValue(rd) && rd.hasCompleted));
59 59
60 -export const getFirstCompletedRemoteData = () =>
61 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
60 +export const getFirstCompletedRemoteData = <T>() =>
61 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
62 62 source.pipe(getAllCompletedRemoteData(), take(1));
63 63
64 -export const takeUntilCompletedRemoteData = () =>
65 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
64 +export const takeUntilCompletedRemoteData = <T>() =>
65 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
66 66 source.pipe(takeWhile((rd: RemoteData<T>) => hasNoValue(rd) || rd.isLoading, true));
67 67
68 -export const getFirstSucceededRemoteData = () =>
69 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
68 +export const getFirstSucceededRemoteData = <T>() =>
69 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
70 70 source.pipe(filter((rd: RemoteData<T>) => rd.hasSucceeded), take(1));
71 71
72 -export const getFirstSucceededRemoteWithNotEmptyData = () =>
73 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
72 +export const getFirstSucceededRemoteWithNotEmptyData = <T>() =>
73 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
74 74 source.pipe(find((rd: RemoteData<T>) => rd.hasSucceeded && isNotEmpty(rd.payload)));
75 75
76 76 /**
77 77 * Get the first successful remotely retrieved object
78 78 *
79 79 * You usually don't want to use this, it is a code smell.
80 80 * Work with the RemoteData object instead, that way you can
81 81 * handle loading and errors correctly.
82 82 *
83 83 * These operators were created as a first step in refactoring
84 84 * out all the instances where this is used incorrectly.
85 85 */
86 -export const getFirstSucceededRemoteDataPayload = () =>
87 - <T>(source: Observable<RemoteData<T>>): Observable<T> =>
86 +export const getFirstSucceededRemoteDataPayload = <T>() =>
87 + (source: Observable<RemoteData<T>>): Observable<T> =>
88 88 source.pipe(
89 89 getFirstSucceededRemoteData(),
90 90 getRemoteDataPayload()
91 91 );
92 92
93 93 /**
94 94 * Get the first successful remotely retrieved object with not empty payload
95 95 *
96 96 * You usually don't want to use this, it is a code smell.
97 97 * Work with the RemoteData object instead, that way you can
98 98 * handle loading and errors correctly.
99 99 *
100 100 * These operators were created as a first step in refactoring
101 101 * out all the instances where this is used incorrectly.
102 102 */
103 -export const getFirstSucceededRemoteDataWithNotEmptyPayload = () =>
104 - <T>(source: Observable<RemoteData<T>>): Observable<T> =>
103 +export const getFirstSucceededRemoteDataWithNotEmptyPayload = <T>() =>
104 + (source: Observable<RemoteData<T>>): Observable<T> =>
105 105 source.pipe(
106 106 getFirstSucceededRemoteWithNotEmptyData(),
107 107 getRemoteDataPayload()
108 108 );
109 109
110 110 /**
111 111 * Get the all successful remotely retrieved objects
112 112 *
113 113 * You usually don't want to use this, it is a code smell.
114 114 * Work with the RemoteData object instead, that way you can
115 115 * handle loading and errors correctly.
116 116 *
117 117 * These operators were created as a first step in refactoring
118 118 * out all the instances where this is used incorrectly.
119 119 */
120 -export const getAllSucceededRemoteDataPayload = () =>
121 - <T>(source: Observable<RemoteData<T>>): Observable<T> =>
120 +export const getAllSucceededRemoteDataPayload = <T>() =>
121 + (source: Observable<RemoteData<T>>): Observable<T> =>
122 122 source.pipe(
123 123 getAllSucceededRemoteData(),
124 124 getRemoteDataPayload()
125 125 );
126 126
127 127 /**
128 128 * Get the first successful remotely retrieved paginated list
129 129 * as an array
130 130 *
131 131 * You usually don't want to use this, it is a code smell.
132 132 * Work with the RemoteData object instead, that way you can
133 133 * handle loading and errors correctly.
134 134 *
135 135 * You also don't want to ignore pagination and simply use the
136 136 * page as an array.
137 137 *
138 138 * These operators were created as a first step in refactoring
139 139 * out all the instances where this is used incorrectly.
140 140 */
141 -export const getFirstSucceededRemoteListPayload = () =>
142 - <T>(source: Observable<RemoteData<PaginatedList<T>>>): Observable<T[]> =>
141 +export const getFirstSucceededRemoteListPayload = <T>() =>
142 + (source: Observable<RemoteData<PaginatedList<T>>>): Observable<T[]> =>
143 143 source.pipe(
144 144 getFirstSucceededRemoteData(),
145 145 getRemoteDataPayload(),
146 146 getPaginatedListPayload()
147 147 );
148 148
149 149 /**
150 150 * Get all successful remotely retrieved paginated lists
151 151 * as arrays
152 152 *
153 153 * You usually don't want to use this, it is a code smell.
154 154 * Work with the RemoteData object instead, that way you can
155 155 * handle loading and errors correctly.
156 156 *
157 157 * You also don't want to ignore pagination and simply use the
158 158 * page as an array.
159 159 *
160 160 * These operators were created as a first step in refactoring
161 161 * out all the instances where this is used incorrectly.
162 162 */
163 -export const getAllSucceededRemoteListPayload = () =>
164 - <T>(source: Observable<RemoteData<PaginatedList<T>>>): Observable<T[]> =>
163 +export const getAllSucceededRemoteListPayload = <T>() =>
164 + (source: Observable<RemoteData<PaginatedList<T>>>): Observable<T[]> =>
165 165 source.pipe(
166 166 getAllSucceededRemoteData(),
167 167 getRemoteDataPayload(),
168 168 getPaginatedListPayload()
169 169 );
170 170
171 171 /**
172 172 * Operator that checks if a remote data object returned a 401 or 404 error
173 173 * When it does contain such an error, it will redirect the user to the related error page, without altering the current URL
174 174 * @param router The router used to navigate to a new page
175 175 * @param authService Service to check if the user is authenticated
176 176 */
177 -export const redirectOn4xx = (router: Router, authService: AuthService) =>
178 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
177 +export const redirectOn4xx = <T>(router: Router, authService: AuthService) =>
178 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
179 179 observableCombineLatest(source, authService.isAuthenticated()).pipe(
180 180 map(([rd, isAuthenticated]: [RemoteData<T>, boolean]) => {
181 181 if (rd.hasFailed) {
182 182 if (rd.statusCode === 404) {
183 183 router.navigateByUrl(getPageNotFoundRoute(), {skipLocationChange: true});
184 184 } else if (rd.statusCode === 403 || rd.statusCode === 401) {
185 185 if (isAuthenticated) {
186 186 router.navigateByUrl(getForbiddenRoute(), {skipLocationChange: true});
187 187 } else {
188 188 authService.setRedirectUrl(router.url);
222 222 * user accepts the agreement.
223 223 */
224 224 export const returnEndUserAgreementUrlTreeOnFalse = (router: Router, redirect: string) =>
225 225 (source: Observable<boolean>): Observable<boolean | UrlTree> =>
226 226 source.pipe(
227 227 map((hasAgreed: boolean) => {
228 228 const queryParams = { redirect: encodeURIComponent(redirect) };
229 229 return hasAgreed ? hasAgreed : router.createUrlTree([getEndUserAgreementPath()], { queryParams });
230 230 }));
231 231
232 -export const getFinishedRemoteData = () =>
233 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
232 +export const getFinishedRemoteData = <T>() =>
233 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
234 234 source.pipe(find((rd: RemoteData<T>) => !rd.isLoading));
235 235
236 -export const getAllSucceededRemoteData = () =>
237 - <T>(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
236 +export const getAllSucceededRemoteData = <T>() =>
237 + (source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
238 238 source.pipe(filter((rd: RemoteData<T>) => rd.hasSucceeded));
239 239
240 -export const toDSpaceObjectListRD = () =>
241 - <T extends DSpaceObject>(source: Observable<RemoteData<PaginatedList<SearchResult<T>>>>): Observable<RemoteData<PaginatedList<T>>> =>
240 +export const toDSpaceObjectListRD = <T extends DSpaceObject>() =>
241 + (source: Observable<RemoteData<PaginatedList<SearchResult<T>>>>): Observable<RemoteData<PaginatedList<T>>> =>
242 242 source.pipe(
243 243 filter((rd: RemoteData<PaginatedList<SearchResult<T>>>) => rd.hasSucceeded),
244 244 map((rd: RemoteData<PaginatedList<SearchResult<T>>>) => {
245 245 const dsoPage: T[] = rd.payload.page.filter((result) => hasValue(result)).map((searchResult: SearchResult<T>) => searchResult.indexableObject);
246 246 const payload = Object.assign(rd.payload, { page: dsoPage }) as PaginatedList<T>;
247 247 return Object.assign(rd, { payload: payload });
248 248 })
249 249 );
250 250
251 251 /**

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut