import { type ClassValue, clsx } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export const allowedEmails = [ 'yoshimura.s@dentsudigital.co.jp', 'manabe.risa@dentsudigital.co.jp', 'watabe.kazuhiro@dentsudigital.co.jp', 'shimizu.r@dentsudigital.co.jp', 'wada.j@dentsudigital.co.jp', 'iijima.m@dentsudigital.co.jp', 'takao.a@dentsudigital.co.jp', 'hayashi.som@dentsudigital.co.jp', 'fukushima.r@dentsudigital.co.jp', 'k.yamada@dentsudigital.co.jp', 'suzuki@dentsudigital.co.jp', 'miyazaki.ay@dentsudigital.co.jp', 'ikeda.yug@dentsudigital.co.jp', 'masamura.y@dentsudigital.co.jp', 'u.gunjlkham@mn.data-artist.com', 'itano.c@dentsudigital.co.jp', 'kazuki.watanabe@contract.dentsudigital.co.jp', 'yuki.watanabe@contract.dentsudigital.co.jp', ]; export const isAllowedUser = (email?: string): boolean => { return email === '' || email === undefined || email === null || (!!email && allowedEmails.includes(email)); }; /** * タイムアウト付きのPromiseラッパー * @param promise 実行するPromise * @param timeoutMs タイムアウト時間(ミリ秒) * @returns タイムアウト付きのPromise */ export function withTimeout(promise: Promise, timeoutMs: number): Promise { return new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new Error(`タイムアウト: ${timeoutMs / 1000}秒以内に処理が完了しませんでした`)); }, timeoutMs); promise .then((result) => { clearTimeout(timeoutId); resolve(result); }) .catch((error) => { clearTimeout(timeoutId); reject(error); }); }); }