Open huytrongnguyen opened 6 months ago
How to pass header to ajax request?
import { Ajax, AjaxError, DataModel, DataStore, HttpParams, LocalCache, ProxyConfig, Rosie, StoreConfig } from 'rosie';
export const JWT_TOKEN = 'jwtToken';
const verifyUrl = '/api/auth/verify',
loginUrl = `/sso/login?redirectUri=/callback`,
AUTH_TOKEN_KEY = 'x-auth-token';
export function redirectToLogin() {
LocalCache.remove(JWT_TOKEN);
location.href = loginUrl;
}
export function verifyAuthToken<T = any>() {
return Ajax.request<T>({ url: verifyUrl })
}
export function onAjaxError(reason: AjaxError) {
// console.error(reason);
if (reason?.response?.status == 401) redirectToLogin();
const message = reason?.response?.data?.message;
if (message) Rosie.alertError(message);
return null;
}
export function onAjaxComplete() { Rosie.afterProcessing(); }
export class AuthDataModel<T> extends DataModel<T> {
fetch(params: HttpParams = {}, onError?: (_reason: AjaxError) => T, onComplete?: () => void) {
if (!params.headers) params.headers = {};
params.headers[AUTH_TOKEN_KEY] = LocalCache.get(JWT_TOKEN);
return super.fetch(params, onError ?? onAjaxError, onComplete ?? onAjaxComplete);
}
}
export const Model = <T = any>(config?: ProxyConfig<T>) => new AuthDataModel<T>(config);
export class AuthDataStore<T> extends DataStore<T> {
fetch(params: HttpParams = {}, onError?: (_reason: AjaxError) => T[], onComplete?: () => void) {
if (!params.headers) params.headers = {};
params.headers[AUTH_TOKEN_KEY] = LocalCache.get(JWT_TOKEN);
return super.fetch(params, onError ?? onAjaxError, onComplete ?? onAjaxComplete);
}
}
export const Store = <T = any>(config?: StoreConfig<T>) => new AuthDataStore<T>(config);