удалить этот ворох кода и сделать оператор (назовите как удобнее)
export const handler = <T>() => pipe(
map((value: T) => ({ loading: false, value })),
startWith({ loading: true }),
catchError(error => of({ loading: false, error })),
shareReplay({ refCount: true, bufferSize: 1 }),
)
потом в сервисе просто
getAdministrators() {
return this.http.get<IAdministrator[]>(`api/v1/admin/users`).pipe(handler())
}
все префиксы к юрл переносим в интерцептор
в компоненте делаем дата-сурс через pipe(map(...))
Обсерваблы выводятся в темплейт через асинк-пайпы. И все, явные подписки тут не нужны.