{"version":3,"file":"js/94958-1d9b409e69383fc48ce1.js","mappings":"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G,EAAiBiF,UACL,gBAAXoB,IACPC,EAAMtG,EAAiBkF,gBAEvBxL,EAAAA,EAAKgM,UAAUY,KACXC,MAAMC,QAAQF,GACdC,MAAM1M,UAAUuD,KAAKqJ,MAAMP,EAAKI,GAEhCJ,EAAI9I,KAAKkJ,G,CAMzB,OADM1E,EAAAA,EAAU8E,eAAeR,EAEnC,EA7cgBlG,EAAA2G,mBAA+BJ,MAAM,KAChDK,KAAK,GACL5F,KAAI,SAAC6F,EAAGC,GAAM,OAAAC,EAAAA,GAASC,QAAQ3G,KAAO,EAAIyG,CAA5B,IAEH9G,EAAAiH,aAAyBV,MAAM,IAC1CK,KAAK,GACL5F,KAAI,SAAC6F,EAAGC,GAAM,OAAAA,EAAI,CAAJ,IAgMH9G,EAAAiE,mBAAqB,CACjC,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OAyNRjE,C,CA/cA,G,6ECKAkH,EAAA,oBAAAA,IAuhBA,QAlhBWA,EAAAC,UAAP,WACI,MAAO,CACH,eACA,gBACA,iBACA,eACA,gBACA,iBACA,eACA,gBACA,iBACA,YAEA,YACA,aACA,WACA,eACA,sBAEA,WACA,aACA,aACA,mBACA,mBAEA,oBACA,oBACA,oBACA,WACA,aAEA,cACA,cACA,cACA,sBACA,oBAEA,sBACA,sBACA,sBACA,iBACA,kBACA,sBACA,wBAER,EAGOD,EAAAE,iBAAP,WAuBI,MAtBW,CACP,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBAGR,EAEOF,EAAAG,kBAAP,WAQI,MAPW,CACP,kBACA,gBACA,cACA,cACA,aAGR,EAEOH,EAAAI,eAAP,WA4BI,MA3BW,CACPC,cAAe,CACX,CACIC,KAAM,uCAGdC,aAAc,CACV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","sources":["webpack://assistant/./frontend/packs/models/RoomStorage.ts","webpack://assistant/./frontend/packs/utils/FormFieldCreator.ts","webpack://assistant/./frontend/packs/utils/TemplateUtil.ts"],"sourcesContent":["import Room from \"packs/models/Room\"\nimport AvailableScheduleTag from \"packs/models/AvailableScheduleTag\"\nimport Appointment from \"packs/models/Appointment\"\nimport RoomMessage from \"packs/models/RoomMessage\"\nimport { Logger } from \"packs/common\"\nimport Util from \"packs/utils/Util\"\nimport Notification from \"packs/models/NotificationAdmin\"\nimport FormField from \"packs/models/FormField\"\nimport SearchedRoomsInfo from \"packs/models/SearchedRoomsInfo\"\n\ninterface Storable {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n clear()\n}\n\nconst STORAGE_KEY_PREFIX = `${process.env.NODE_ENV} ${navigator ? navigator.appVersion : ``}` // ローカル/本番/ブラウザで分けるため\nconst STORAGE_KEY = `${STORAGE_KEY_PREFIX}LinkRoom` // 作成中の調整ページ [Room]\nconst STORAGE_KEY_PREVIEW = `${STORAGE_KEY_PREFIX}LinkRoomPreview` // 作成中の調整ページ [Room]\nconst STORAGE_KEY_STATUS = `${STORAGE_KEY_PREFIX}LinkRoomStatus` // 作成中の調整ページのステータス [string] new, edit, copy\nconst STORAGE_KEY_ASTAG = `${STORAGE_KEY_PREFIX}LinkRoomAstag` // Astagの編集画面. [AvailableScheduletag]\nconst STORAGE_KEY_ASTAG_FROM = `${STORAGE_KEY_PREFIX}LinkRoomAstagFrom` // どこから飛んできたか [string] chukaiNewRoom, chukaiEditRoom, new, edit\nconst STORAGE_KEY_LAST_ASTAG_ID = `${STORAGE_KEY_PREFIX}LinkRoomLastAstagID` // 最後に利用しているastagのID\nconst STORAGE_KEY_APPOINTMENT = `${STORAGE_KEY_PREFIX}LinkRoomAppointment` // Appoの編集画面. [Appointment]\nconst STORAGE_KEY_APPOINTMENT_PREVIEW = `${STORAGE_KEY_PREFIX}LinkRoomAppointmentPreview` // Appoの編集画面. [Appointment]\nconst STORAGE_KEY_SELECTED_ROOM_ID = `${STORAGE_KEY_PREFIX}LinkRoomSelectedRoomId` // 選択中のRoomのID\nconst STORAGE_KEY_SELECTED_PARENT_ROOM_ID = `${STORAGE_KEY_PREFIX}LinkRoomSelectedParentRoomId` // 選択中のRoomのID\nconst STORAGE_KEY_INPUT_MESSAGES = `${STORAGE_KEY_PREFIX}LinkRoomInputMessages` // 送信していないメッセージ入力をRoomIdをキーとして保存.\nconst STORAGE_KEY_UNSENT_MESSAGES = `${STORAGE_KEY_PREFIX}LinkRoomUnsentMessages` // 送信したが送信できなかったメッセージをRoomIdをキーとしてArrayで保存.\n// const STORAGE_KEY_LOGGIN_STATUS = \"LinkRoomLogginStatus\" // ユーザーはログインしているか. true, false\nconst STORAGE_KEY_SCHEDULE_TYPE = `${STORAGE_KEY_PREFIX}LinkRoomScheduleType` // ユーザーはログインしているか. true, false\nconst STORAGE_KEY_NOT_FIX_START_TIME = `${STORAGE_KEY_PREFIX}LinkRoomNotFixStartTime` // 未確定の今回のfixしたい日程が入っている.\nconst STORAGE_KEY_OPEN_MESSAGE_WINDOW = `${STORAGE_KEY_PREFIX}LinkRoomNotFixStartTime` // 調整ページで窓を開いておくかどうか.\n// const STORAGE_KEY_OPEN_MESSAGE_WINDOW_STATUS = `${STORAGE_KEY_PREFIX}LinkRoomOpenMessageWindowStatus` //タブを開いているか(未読のカウントアップに利用.)\nconst STORAGE_KEY_CURRENT_ROOMS_TAB = `${STORAGE_KEY_PREFIX}LinkRoomCurrentRoomsTabWithWho` // 調整ページ一覧で現在のタブを記憶.(自分/全体も一緒に)\nconst STORAGE_KEY_SUMMARY_TAB = `${STORAGE_KEY_PREFIX}LinkRoomSummaryTab` // 調整ページ一覧で現在のタブを記憶.(自分/全体も一緒に)\nconst STORAGE_KEY_CURRENT_PROGRESS_USER = `${STORAGE_KEY_PREFIX}LinkRoomCurrentProgressUser` // 進捗管理画面で現在のユーザー名.\nconst STORAGE_KEY_CURRENT_PROGRESS_FILTER = `${STORAGE_KEY_PREFIX}LinkRoomCurrentProgressFilter` // 進捗管理画面で現在のフィルター名\nconst STORAGE_KEY_REFRESHER = `${STORAGE_KEY_PREFIX}LinkRoomRefresher` // リフレッシュする内容を保存.\nconst STORAGE_KEY_OPEN_REPORT_DETAIL = `${STORAGE_KEY_PREFIX}LinkRoomReportOpenReportDetail` // レポートで開いているユーザーを保存\nconst STORAGE_KEY_SUGGESTED_ROOM_QUESTIONS = `${STORAGE_KEY_PREFIX}LinkRoomSuggestedRoomQuestions` // 投票ページ固定している質問項目をルームごとに保存\nconst STORAGE_KEY_SEARCH_ROOMS_DIC = `${STORAGE_KEY_PREFIX}LinkRoomSearchRoomsDic` // 検索かけた情報を保存\n\nexport default class RoomStorage {\n constructor(\n // デフォルト引数でローカルストレージを DI\n private storage: Storable = Util && Util.isEmbeds() ? null : localStorage\n ) {}\n\n public resetAll() {\n this.storage.clear()\n }\n\n // 現在の調整ページを保存する\n public save(room: Room) {\n if (Util.isEmbeds()) return null\n try {\n this.storage.setItem(STORAGE_KEY, JSON.stringify(room))\n } catch {}\n }\n\n // プレビュー用のルームを保存します。\n public saveRoomPreview(room: Room) {\n try {\n this.storage.setItem(STORAGE_KEY_PREVIEW, JSON.stringify(room))\n } catch (e) {\n // ストレージ容量超過時のエラーハンドリング\n Logger(`ストレージ保存エラー: ${e.message}`)\n // ストレージがいっぱいの場合、一度クリアしてから再試行\n try {\n // プレビューデータのみを削除\n this.storage.removeItem(STORAGE_KEY_PREVIEW)\n // 再度保存を試みる\n this.storage.setItem(STORAGE_KEY_PREVIEW, JSON.stringify(room))\n } catch (retryError) {\n // それでも失敗した場合\n Logger(`ストレージ再保存エラー: ${retryError.message}`)\n }\n }\n }\n\n // 現在の調整ページを取得する\n public fetchRoom(): Room {\n if (Util.isEmbeds()) return null\n const room: Room = JSON.parse(this.storage.getItem(STORAGE_KEY) || \"{}\")\n return room\n }\n\n // プレビュー用のルームを取得します。\n public fetchRoomPreview(): Room {\n const room: Room = JSON.parse(this.storage.getItem(STORAGE_KEY_PREVIEW) || \"{}\")\n return room\n }\n\n // 現在の調整ページ作成時のアクションを保存します。 copy, edit, new\n public saveAction(str: string) {\n if (Util.isEmbeds()) return null\n this.storage.setItem(STORAGE_KEY_STATUS, str)\n }\n\n // 現在の調整ページ作成時のアクションを保存します。\n public fetchAction(): string {\n if (Util.isEmbeds()) return \"\"\n return this.storage.getItem(STORAGE_KEY_STATUS) || \"\"\n }\n\n // すべてのルーム情報を削除します。\n public deleteRoomInfo() {\n this.storage.setItem(STORAGE_KEY_STATUS, null)\n this.storage.setItem(STORAGE_KEY, null)\n }\n\n /**\n * 現在のAstagの状態を保存します。 copy, edit, new\n * @param astag [AvailableScheduleTag]\n */\n public saveAstag(astag: AvailableScheduleTag) {\n this.storage.setItem(STORAGE_KEY_ASTAG, JSON.stringify(astag))\n }\n\n /**\n * 現在のAstagを取得します。\n */\n public fetchAstag(): AvailableScheduleTag {\n if (Util.isEmbeds()) return null\n const _astag = JSON.parse(this.storage.getItem(STORAGE_KEY_ASTAG) || \"{}\") as AvailableScheduleTag\n if (!_astag || !_astag.systemUpdatedAt) return _astag\n Logger(`fetchAstag parse後: ${Util.output(_astag)}`)\n const astag = AvailableScheduleTag.fetchFromJson([_astag])[0]\n Logger(`fetchAstag: 戻します::`)\n\n return astag\n }\n\n public saveLastAstagId(astagId: string) {\n this.storage.setItem(STORAGE_KEY_LAST_ASTAG_ID, astagId)\n }\n\n public fetchLastAstagId(): string {\n let _id = this.storage.getItem(STORAGE_KEY_LAST_ASTAG_ID)\n return _id && _id.length > 0 ? _id : null\n }\n\n /**\n * どのページから/available_scheduleに飛んできたか(用途含む)を保存します。 copy, edit, new\n * @param str\n */\n public saveAstagFrom(str: string) {\n this.storage.setItem(STORAGE_KEY_ASTAG_FROM, str)\n }\n\n /**\n * どのページから/available_scheduleに飛んできたかを取得します。\n */\n public fetchAstagFrom(): string {\n return this.storage.getItem(STORAGE_KEY_ASTAG_FROM) || \"\"\n }\n\n /**\n * 現在のAppointmentの状態を保存します。\n * @param astag [AvailableScheduleTag]\n */\n public saveAppointment(appo: Appointment) {\n if (Util.isEmbeds()) return\n Logger(`appoをストレージに保存: ${Util.output(appo)}`)\n this.storage.setItem(STORAGE_KEY_APPOINTMENT, JSON.stringify(appo))\n }\n\n /**\n * 現在のAppointmentを取得します。\n */\n public fetchAppointment(): Appointment {\n if (Util.isEmbeds()) return null\n try {\n const astag: Appointment = JSON.parse(this.storage.getItem(STORAGE_KEY_APPOINTMENT) || null)\n return astag\n } catch {\n return null\n }\n }\n\n /**\n * 現在のプレビュー用のAppointmentの状態を保存します。\n * @param astag [AvailableScheduleTag]\n */\n public saveAppointmentPreview(appo: Appointment) {\n Logger(`preview用appoをストレージに保存: ${Util.output(appo)}`)\n this.storage.setItem(STORAGE_KEY_APPOINTMENT_PREVIEW, JSON.stringify(appo))\n }\n\n /**\n * 現在のプレビュー用のAppointmentを取得します。\n */\n public fetchAppointmentPreview(): Appointment {\n try {\n const astag: Appointment = JSON.parse(this.storage.getItem(STORAGE_KEY_APPOINTMENT_PREVIEW) || null)\n return astag\n } catch {\n return null\n }\n }\n\n /**\n * 選択中のルームIDを保存します。\n * @param str\n */\n public saveSelectedRoomKey(str: string) {\n this.storage.setItem(STORAGE_KEY_SELECTED_ROOM_ID, str)\n }\n\n /**\n * 選択中のルームIDを取得します。\n */\n public fetchSelectedRoomKey(): string {\n if (Util.isEmbeds()) return \"\"\n return this.storage.getItem(STORAGE_KEY_SELECTED_ROOM_ID) || \"\"\n }\n\n /**\n * 選択中のルームIDを保存します。\n * @param str\n */\n public saveSelectedParentRoomId(str: string) {\n this.storage.setItem(STORAGE_KEY_SELECTED_PARENT_ROOM_ID, str)\n }\n\n /**\n * 選択中のルームIDを取得します。\n */\n public fetchSelectedParentRoomId(): string {\n try {\n return this.storage.getItem(STORAGE_KEY_SELECTED_PARENT_ROOM_ID)\n } catch {\n return \"\"\n }\n }\n\n /**\n * 送信していないメッセージ入力をRoomIdをキーとして保存します。\n * @param roomId [string] ルームID\n * @param message [RoomMessage] メッセージ\n */\n public saveInputMessage(roomId: string, message: RoomMessage) {\n if (Util.isEmbeds()) return\n let dic = this.fetchInputMessages()\n dic[roomId] = message\n this.storage.setItem(STORAGE_KEY_INPUT_MESSAGES, JSON.stringify(dic))\n }\n\n /**\n * 送信していないメッセージ入力を取得します。\n * @param roomId [string]\n * @return message [RoomMessage]\n */\n public fetchInputMessage(roomId: string): RoomMessage {\n if (Util.isEmbeds()) return\n const inputMessageDic = this.fetchInputMessages()\n return inputMessageDic[roomId] as RoomMessage\n }\n\n /**\n * 送信していないメッセージDicを取得(タイプ欄にあるもの)します。(key: RoomId, value: 入力途中のmessage)\n */\n public fetchInputMessages(): any {\n if (Util.isEmbeds()) return\n const inputMessageDic = JSON.parse(this.storage.getItem(STORAGE_KEY_INPUT_MESSAGES) || \"{}\")\n return inputMessageDic\n }\n\n // 送信ボタンを押下したあとの、送信できなかった未送信メッセージを保存\n public saveUnsentMessages(roomId: string, message: RoomMessage) {\n if (Util.isEmbeds()) return\n // let dic = this.fetchUnsentMessages() || {}\n let dic = {}\n let messages: RoomMessage[] = dic[roomId] || []\n dic[roomId] = messages.push(message)\n this.storage.setItem(STORAGE_KEY_UNSENT_MESSAGES, JSON.stringify(dic))\n }\n\n //\n // public fetchUnsentMessages() {\n // const unsentMessageDic = JSON.parse(this.storage.getItem(STORAGE_KEY_UNSENT_MESSAGES) || \"{}\")\n // return unsentMessageDic\n // }\n\n // ページを離れるときにすべてのみ送信のメッセージを削除します。\n public deleteUnsentMessagesAll() {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_UNSENT_MESSAGES, null)\n }\n\n /**\n * 送信していないメッセージ入力をRoomIdをキーとして保存します。\n * @param type [string]\n */\n public saveScheduleType(type: string) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_SCHEDULE_TYPE, JSON.stringify(type))\n }\n\n /**\n * 送信していないメッセージ入力を取得します。\n * @return type [string]\n */\n public fetchScheduleType(): string {\n if (Util.isEmbeds()) return \"\"\n const type = JSON.parse(this.storage.getItem(STORAGE_KEY_SCHEDULE_TYPE) || \"\")\n return type\n }\n\n /**\n * 送信していないメッセージ入力をRoomIdをキーとして保存します。\n * @param start_time [string]\n */\n public saveScheduleStartTime(start_time: number) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_NOT_FIX_START_TIME, JSON.stringify(start_time))\n }\n\n /**\n * 送信していないメッセージ入力を取得します。\n * @return start_time [string]\n */\n public fetchScheduleStartTime(): number {\n if (Util.isEmbeds()) return 0\n const start_time = JSON.parse(this.storage.getItem(STORAGE_KEY_NOT_FIX_START_TIME) || \"0\")\n return start_time\n }\n\n // メッセージの開閉をルームごとに記憶.\n public saveOpenMessageWindow(roomId: string, open: boolean): void {\n if (Util.isEmbeds()) return\n let dic = {}\n try {\n dic = this.getOpenMessageWindowDic()\n dic[roomId] = open\n } catch {\n dic = {}\n dic[roomId] = open\n }\n\n this.storage.setItem(STORAGE_KEY_OPEN_MESSAGE_WINDOW, JSON.stringify(dic))\n }\n\n // メッセージの開閉情報を取得.\n public fetchOpenMessageWindow(roomId: string): boolean {\n if (Util.isEmbeds()) return\n const dic = this.getOpenMessageWindowDic()\n return dic[roomId]\n }\n\n // メッセージの開閉情報のDictionaryを取得.\n public getOpenMessageWindowDic(): any {\n if (Util.isEmbeds()) return\n\n let dic = {}\n try {\n dic = JSON.parse(this.storage.getItem(STORAGE_KEY_OPEN_MESSAGE_WINDOW) || \"{}\")\n } catch {\n dic = {}\n }\n // Logger(`room storage dic: ${Util.output(dic)}`)\n return dic\n }\n\n // 現在の調整ページを保存する\n public saveNotification(noti: Notification) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY, JSON.stringify(noti))\n }\n\n // 現在の調整ページを取得する\n public fetchNotification(): Notification {\n if (Util.isEmbeds()) return\n const n: Notification = JSON.parse(this.storage.getItem(STORAGE_KEY) || \"{}\")\n return n\n }\n\n /**\n * 現在の調整ページ一覧のタブ情報を保存.\n * @param tabName categoryHoge名\n * @param whose 今の時点では all/self 全体/自分\n */\n public saveCurrentRoomsTab(tabName: string, whose: string) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_CURRENT_ROOMS_TAB, `${tabName} ${whose}`)\n }\n\n // 現在の調整ページを取得する\n public fetchCurrentRoomsTab(): string[] {\n if (Util.isEmbeds()) return []\n const n: string = this.storage.getItem(STORAGE_KEY_CURRENT_ROOMS_TAB) || \"public self\"\n return n.split(\" \")\n }\n\n /**\n * サマリータブ情報を保存.\n * @param tabName categoryHoge名\n */\n public saveSummaryTab(tabName: string) {\n this.storage.setItem(STORAGE_KEY_SUMMARY_TAB, `${tabName}`)\n }\n\n // サマリータブ情報を取得.\n public fetchSummaryTab(): string {\n if (Util.isEmbeds()) return \"pv\"\n const n: string = this.storage.getItem(STORAGE_KEY_SUMMARY_TAB) || \"pv\"\n return n\n }\n\n /**\n * 進捗管理画面 現在の選択ユーザー名を保存.\n * @param tabName categoryHoge名\n * @param whose 今の時点では all/self 全体/自分\n */\n public saveCurrentProgressUserName(userName: string) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_CURRENT_PROGRESS_USER, `${userName}`)\n }\n\n // 進捗管理画面 現在の選択ユーザー名を取得する\n public fetchCurrentProgressUserName(): string {\n if (Util.isEmbeds()) return \"すべて\"\n const n: string = this.storage.getItem(STORAGE_KEY_CURRENT_PROGRESS_USER) || \"すべて\"\n return n\n }\n\n /**\n * 進捗管理画面 現在の選択ユーザー名を保存.\n * @param tabName categoryHoge名\n * @param whose 今の時点では all/self 全体/自分\n */\n public saveCurrentProgressFilterName(filterName: string) {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_CURRENT_PROGRESS_FILTER, `${filterName}`)\n }\n\n // 進捗管理画面 現在の選択ユーザー名を取得する\n public fetchCurrentProgressFilterName(): string {\n if (Util.isEmbeds()) return \"すべて\"\n const n: string = this.storage.getItem(STORAGE_KEY_CURRENT_PROGRESS_FILTER) || \"すべて\"\n return n\n }\n\n public saveRefresher(refresher: string) {\n if (Util.isEmbeds()) return\n let n = this.fetchRefresher()\n n.push(refresher)\n this.storage.setItem(STORAGE_KEY_REFRESHER, JSON.stringify(n))\n }\n\n public removeRefresher() {\n if (Util.isEmbeds()) return\n this.storage.setItem(STORAGE_KEY_REFRESHER, JSON.stringify([]))\n }\n\n public fetchRefresher(): string[] {\n if (Util.isEmbeds()) return []\n const n: string[] = JSON.parse(this.storage.getItem(STORAGE_KEY_REFRESHER)) || []\n return n\n }\n\n public saveOpenReportUserIDs(userId: string) {\n let n = this.fetchOpenReportUserIDs()\n n.push(userId)\n this.storage.setItem(STORAGE_KEY_OPEN_REPORT_DETAIL, JSON.stringify(n))\n return n\n }\n\n public removeOpenReportUserIDs(userId: string) {\n let n = this.fetchOpenReportUserIDs()\n n = n.filter(_id => _id != userId)\n this.storage.setItem(STORAGE_KEY_OPEN_REPORT_DETAIL, JSON.stringify(n))\n return n\n }\n\n public fetchOpenReportUserIDs(): string[] {\n const n: string[] = JSON.parse(this.storage.getItem(STORAGE_KEY_OPEN_REPORT_DETAIL)) || []\n return n\n }\n\n public saveDisplayFieldsInPublicRoom(fs: FormField[], roomId: string) {\n let dic = this.fetchDisplayFieldsInPublicRoom()\n dic[roomId] = fs\n this.storage.setItem(STORAGE_KEY_SUGGESTED_ROOM_QUESTIONS, JSON.stringify(dic))\n return dic\n }\n\n public fetchDisplayFieldsInPublicRoom(roomId: string = null) {\n const dic: any = JSON.parse(this.storage.getItem(STORAGE_KEY_SUGGESTED_ROOM_QUESTIONS)) || {}\n if (roomId) {\n return dic[roomId] || []\n } else {\n return dic || {}\n }\n }\n\n /**\n * 現在のSearchedRoomsInfoの状態を保存します。\n * @param astag [AvailableScheduleTag]\n */\n public saveSearchedRoomsInfo(info: SearchedRoomsInfo) {\n Logger(`appoをストレージに保存: ${Util.output(info)}`)\n this.storage.setItem(STORAGE_KEY_SEARCH_ROOMS_DIC, JSON.stringify(info))\n }\n\n /**\n * 現在のSearchedRoomsInfoを取得します。\n */\n public fetchSearchedRoomsInfo(): SearchedRoomsInfo {\n const info: SearchedRoomsInfo = JSON.parse(this.storage.getItem(STORAGE_KEY_SEARCH_ROOMS_DIC) || null)\n return info\n }\n}\n","import axios from \"axios\"\nimport { DateTime } from \"luxon\"\nimport { decodeQueryParam, Logger } from \"packs/common\"\n// import qs from \"qs\"\n// import isMobile from \"ismobilejs\"\nimport Appointment from \"packs/models/Appointment\"\nimport Util from \"./Util\"\nimport RoomMember from \"packs/models/RoomMember\"\nimport FormField from \"packs/models/FormField\"\n// declare var ics: any\n// const ics = require(\"ics\")\n// const { writeFileSync } = require(\"fs\")\n\n// 便利系を記載.\nexport default class FormFieldCreator {\n static readonly selectDefaultYears: number[] = Array(100)\n .fill(0)\n .map((_, i) => DateTime.local().year + 1 - i)\n\n static readonly selectMonths: number[] = Array(12)\n .fill(0)\n .map((_, i) => i + 1)\n\n static selectYears(startYear: number, endYear: number): number[] {\n const years: number[] = []\n for (let year = startYear; year <= endYear; year++) {\n years.push(year)\n }\n return years\n }\n\n static fieldTypeArray(): any[] {\n return [\n { field_type: `input`, name: `1行記述`, icon: `/assets/icons/field_one.png` },\n { field_type: `textarea`, name: `複数行記述`, icon: `/assets/icons/field_multi.png` },\n { field_type: `radio`, name: `ラジオボタン (単一選択)`, icon: `/assets/icons/field_radio.png` },\n { field_type: `select`, name: `プルダウン`, icon: `/assets/icons/field_dropdown.png` },\n { field_type: `checkbox`, name: `チェックボックス (複数選択)`, icon: `/assets/icons/field_checkbox.png` },\n { field_type: `birthdate`, name: `年月日`, icon: `/assets/icons/field_birthdate.png` },\n { field_type: `prefectures`, name: `都道府県`, icon: `/assets/icons/japan.png` },\n { field_type: `address`, name: `住所`, icon: `/assets/icons/postalcode.png` },\n\n { field_type: `upload_file`, name: `ファイルアップロード`, icon: `/assets/icons/upload.png` },\n { field_type: `radio_image`, name: `画像選択 (単一選択)`, icon: `/assets/icons/select_images.png` },\n { field_type: `checkbox_image`, name: `画像選択 (複数選択)`, icon: `/assets/icons/select_images.png` },\n ]\n }\n\n static fieldTypeSpecialInputArray(needNameAndCompany = false, needChukaiMenu = false): any[] {\n let arr = []\n if (needNameAndCompany) {\n arr = [\n ...arr,\n { field_type: `attendee1_name`, name: `氏名`, icon: `/assets/icons/field_one` },\n { field_type: `attendee1_email`, name: `メールアドレス`, icon: `/assets/icons/field_one` },\n ]\n }\n arr = [\n ...arr,\n { field_type: `attendee1_company_name`, name: `会社名`, icon: `/assets/icons/field_one` },\n { field_type: `attendee1_cc_emails`, name: `CCメールアドレス`, icon: `/assets/icons/field_one` },\n { field_type: `attendee1_tel`, name: `電話番号`, icon: `/assets/icons/call` },\n ]\n\n if (needChukaiMenu) {\n arr.push({ field_type: `open_schedule_memo`, name: `連絡事項(仲介メニュー)`, icon: `/assets/icons/field_multi` })\n }\n return arr\n }\n\n static fieldTypeSpecialParamKeyArray(needNameAndCompany = false, needChukaiMenu = false) {\n return this.fieldTypeSpecialInputArray(needNameAndCompany, needChukaiMenu).map(dic => dic.field_type)\n }\n\n // 入力なし項目\n static fieldTypeNoneInputArray(): any[] {\n return [\n { field_type: `head1`, name: `大見出し`, icon: `/assets/icons/field_text_head` },\n { field_type: `head2`, name: `小見出し`, icon: `/assets/icons/field_text_head` },\n { field_type: `image1`, name: `画像`, icon: `/assets/icons/select_images` },\n ]\n }\n\n static resetFieldValues(fields: FormField[]) {\n if (Util.isBlank(fields)) return\n let _fs = [...fields]\n let fs = []\n for (let _f of _fs) {\n _f.value_attr = null\n _f.selected_values = []\n fs.push(_f)\n }\n return fs\n }\n\n /**\n * 選択したフィールド名から、作成します.\n */\n static getFieldFromFieldType(_typeDic: any) {\n let _f = FormField.createDefault(0)\n _f.field_type = _typeDic.field_type\n _f.field_name = `新規${_typeDic.name}`\n\n if (\n this.fieldTypeSpecialInputArray(true, true)\n .map(t => t.field_type)\n .includes(_typeDic.field_type)\n ) {\n // 特殊フィールドです.\n if (_typeDic.field_type == `attendee1_company_name`) {\n _f = FormField.createCompanyField(0)\n } else if (_typeDic.field_type == `attendee1_cc_emails`) {\n _f = FormField.createCCEmailsField(0)\n } else if (_typeDic.field_type == `attendee1_tel`) {\n _f = FormField.createTelField(0)\n } else if (_typeDic.field_type == `attendee1_name`) {\n _f = FormField.createNameField(0)\n } else if (_typeDic.field_type == `attendee1_email`) {\n _f = FormField.createEmailField(0)\n } else if (_typeDic.field_type == `open_schedule_memo`) {\n _f = FormField.createOpenScheduleMemoField(0)\n }\n }\n if (\n FormField.selectableTypes.includes(_typeDic.field_type) ||\n FormField.selectableWithImageTypes.includes(_typeDic.field_type)\n ) {\n _f.selectable_values = [\n { value: `選択肢1`, image_url: `` },\n { value: `選択肢2`, image_url: `` },\n { value: `選択肢3`, image_url: `` },\n ]\n _f.default_selected_values = []\n } else if (_typeDic.field_type == `prefectures`) {\n _f = FormFieldCreator.prefectures()\n _f.field_name = `新規${_typeDic.name}`\n }\n\n return _f\n }\n\n static birthdateField() {\n let ff = FormField.createDefault()\n }\n\n static createField(\n indexNum = 0,\n fieldType: string,\n name: string,\n description: string,\n placeholder: string,\n isRequired: boolean = false\n ) {\n let _f = FormField.createDefault(indexNum)\n _f.canDelete = true\n _f.field_type = fieldType\n _f.field_name = name\n _f.description = description\n _f.placeholder_attr = placeholder\n _f.is_required = isRequired\n return _f\n }\n\n /**\n * 電話番号\n * @param indexNum\n */\n static phone(indexNum = 0) {\n return this.createField(indexNum, `input`, `電話番号`, `ハイフンなしで記入してください。`, `09025252525`, false)\n }\n\n static content(indexNum = 0, name = `お問い合わせ内容`) {\n return this.createField(indexNum, `textarea`, name, ``, ``, false)\n }\n\n static addressGroup() {\n let postcode = this.createField(0, `input`, `郵便番号`, ``, `1002222`, false)\n let address = this.createField(0, `input`, `住所`, ``, `東京都千代田区飯田橋`, false)\n let mansionName = this.createField(0, `input`, `ビル・マンション名など`, ``, `マンション`, false)\n return [postcode, address, mansionName]\n }\n\n static serviceName(): FormField {\n return this.createField(0, `input`, `ご利用されたサービス名`, ``, ``, false)\n }\n\n static serviceStart(): FormField {\n return this.createField(0, `birthdate`, `サービスご利用日`, ``, ``, false)\n }\n\n static servicePic(): FormField {\n return this.createField(0, `input`, `サービス担当者`, ``, `湧田 洋介`, false)\n }\n\n static gender(): FormField {\n let _f = FormField.createDefault(0)\n _f.field_type = `radio`\n _f.field_name = `性別`\n _f.selectable_values = [\n { value: `男性`, image_url: null },\n { value: `女性`, image_url: null },\n ]\n _f.default_selected_values = []\n return _f\n }\n\n static birthday(name = `生年月日`): FormField {\n let _f = FormField.createDefault(0)\n _f.field_type = `birthdate`\n _f.field_name = name\n return _f\n }\n\n static readonly getPrefeturesArray = [\n \"北海道\",\n \"青森県\",\n \"岩手県\",\n \"宮城県\",\n \"秋田県\",\n \"山形県\",\n \"福島県\",\n \"茨城県\",\n \"栃木県\",\n \"群馬県\",\n \"埼玉県\",\n \"千葉県\",\n \"東京都\",\n \"神奈川県\",\n \"新潟県\",\n \"富山県\",\n \"石川県\",\n \"福井県\",\n \"山梨県\",\n \"長野県\",\n \"岐阜県\",\n \"静岡県\",\n \"愛知県\",\n \"三重県\",\n \"滋賀県\",\n \"京都府\",\n \"大阪府\",\n \"兵庫県\",\n \"奈良県\",\n \"和歌山県\",\n \"鳥取県\",\n \"島根県\",\n \"岡山県\",\n \"広島県\",\n \"山口県\",\n \"徳島県\",\n \"香川県\",\n \"愛媛県\",\n \"高知県\",\n \"福岡県\",\n \"佐賀県\",\n \"長崎県\",\n \"熊本県\",\n \"大分県\",\n \"宮崎県\",\n \"鹿児島県\",\n \"沖縄県\",\n ]\n\n static prefectures(): FormField {\n let prefs = this.getPrefeturesArray\n let prefField = this.createField(0, `select`, `都道府県`, ``, ``, false)\n prefField.selectable_values = prefs.map(pr => {\n return { value: pr, image_url: null }\n })\n return prefField\n }\n\n static postalcodeGroup(): FormField[] {\n let postalcode = this.createField(0, `input`, `郵便番号`, ``, ``, false)\n let prefs = this.prefectures()\n let city = this.createField(0, `input`, `市区町村`, ``, ``, false)\n let address1 = this.createField(0, `input`, `番地`, ``, ``, false)\n let address2 = this.createField(0, `input`, `マンションなど`, ``, ``, false)\n return [postalcode, prefs, city, address1, address2]\n }\n\n static univGroup(): FormField[] {\n let univ = this.createField(0, `input`, `大学名`, ``, ``, false)\n let faculty = this.createField(0, `input`, `学部名`, ``, ``, false)\n let department = this.createField(0, `input`, `学科・コース名`, ``, ``, false)\n let academicBackground = this.createField(0, `select`, `最終学歴`, ``, ``, false)\n let selects = [\n `高等学校 中退`,\n `高等学校 卒業`,\n `専門学校・短期大学 中退`,\n `専門学校・短期大学 卒業`,\n `大学 中退`,\n `大学 卒業`,\n `大学院 中退`,\n `大学院 卒業`,\n ]\n academicBackground.selectable_values = selects.map(sl => {\n return { value: sl, image_url: null }\n })\n academicBackground.default_selected_values = []\n let grad = this.birthday(`卒業年月日`)\n let going = this.content(0, `現在の就職活動状況(これまでの経緯)についてお聞かせください`)\n let motivation = this.content(0, `志望動機をお聞かせください。`)\n let pr = this.content(0, `自己PRをお願いします。`)\n let univGoing = this.content(0, `学生時代に力を入れたことについてお聞かせください。`)\n let thesis = this.content(0, `ゼミ、卒論についてお聞かせください。`)\n let nextTodo = this.content(0, `入社後、特にやりたいことがあれば教えてください。`)\n return [univ, faculty, department, academicBackground, grad, going, motivation, pr, univGoing, thesis, nextTodo]\n }\n\n static companyInfoGroup(): FormField[] {\n let branch = this.createField(0, `input`, `支社・支店名`, ``, ``, false)\n let department = this.createField(0, `input`, `部門`, ``, ``, false)\n let division = this.createField(0, `input`, `課`, ``, ``, false)\n return [branch, department, division]\n }\n\n static question(): FormField {\n let question = this.content(0, `当日お聞きになりたいことがあれば事前に教えて下さい。`)\n return question\n }\n\n static remarks(): FormField {\n let question = this.content(0, `備考`)\n return question\n }\n\n static satisfaction(): FormField {\n let question = this.createField(0, `radio`, `満足度`, ``, ``, true)\n question.description = ``\n question.selectable_values = [`不満`, `少し不満`, `まあまあ`, `満足`, `大変満足`].map(pr => {\n return { value: pr, image_url: null }\n })\n return question\n }\n\n static satisfactionReason(): FormField {\n let question = this.content(0, `満足度の理由を教えて下さい`)\n question.description = `上記でそう答えられた理由を詳細に教えてください。`\n return question\n }\n\n static useRepeat(): FormField {\n let question = this.createField(0, `radio`, `またお使いになられたいですか?`, ``, ``, true)\n question.selectable_values = [`はい`, `いいえ`].map(pr => {\n return { value: pr, image_url: null }\n })\n return question\n }\n\n static request(): FormField {\n let question = this.content(0, `ご意見・ご要望などお聞かせください!`)\n return question\n }\n\n static nextSchedule(): FormField {\n let question = this.createField(0, `radio`, `またご相談など調整をご希望ですか?`, ``, ``, true)\n question.selectable_values = [`いいえ、今は結構です`, `はい、お願いします`].map(pr => {\n return { value: pr, image_url: null }\n })\n return question\n }\n\n static wantOnlineMeeting(): FormField {\n let _f = FormField.createDefault(0)\n _f.field_type = `radio`\n _f.field_name = `オンラインで相談を希望`\n _f.selectable_values = [\n { value: `希望する`, image_url: null },\n { value: `希望しない`, image_url: null },\n ]\n _f.default_selected_values = []\n _f.is_required = true\n return _f\n }\n\n static wantOnlineMeetingRule(): FormField[] {\n let _f = this.wantOnlineMeeting()\n _f.selected_values = [`希望する`]\n return [_f]\n }\n\n static wantNextScheduleRule(): FormField[] {\n let _f = this.nextSchedule()\n _f.selected_values = [`はい、お願いします`]\n return [_f]\n }\n\n static setValueFromAdditionalParams(_fields: FormField[], additionalParams: any) {\n Logger(`setValueFromAdditionalParams additionalParams: ${Util.output(additionalParams)}`)\n if (!_fields) return []\n\n for (let _f of _fields) {\n if (Util.isPresent(_f.value_attr)) continue\n\n if (_f.param_key == `attendee1_name` && Util.isPresent(additionalParams[`name`])) {\n _f.value_attr = decodeQueryParam(additionalParams[`name`])\n } else if (_f.param_key == `attendee1_email` && Util.isPresent(additionalParams[`email`])) {\n _f.value_attr = decodeQueryParam(additionalParams[`email`])\n } else if (_f.param_key == `attendee1_company_name` && Util.isPresent(additionalParams[`company_name`])) {\n _f.value_attr = decodeQueryParam(additionalParams[`company_name`])\n } else if (_f.param_key == `attendee1_tel` && Util.isPresent(additionalParams[`phone_number`])) {\n _f.value_attr = decodeQueryParam(additionalParams[`phone_number`])\n } else {\n if (Util.isPresent(additionalParams[_f.param_key])) {\n if (FormField.selectableTypes.includes(_f.field_type)) {\n let vals = decodeQueryParam(additionalParams[_f.param_key])\n _f.selected_values = vals.split(`,`) || []\n } else {\n _f.value_attr = decodeQueryParam(additionalParams[_f.param_key])\n }\n }\n }\n let hff = additionalParams.hide_filled_fields\n if ((Util.isPresent(_f.value_attr) || Util.isPresent(_f.selected_values)) && Util.isPresent(hff) && hff == \"true\") {\n _f.hideField = true\n }\n }\n return _fields\n }\n\n static createFormFieldsFromArray(ffs: FormField[], ffsArray: any[]) {\n if (!ffs) ffs = []\n // let ffs = []\n if (Util.isPresent(ffsArray)) {\n for (let _ffname of ffsArray) {\n let _ff = null\n\n if (_ffname == `phone`) {\n _ff = FormFieldCreator.phone()\n } else if (_ffname == `content`) {\n _ff = FormFieldCreator.content()\n } else if (_ffname == `addressGroup`) {\n _ff = FormFieldCreator.addressGroup()\n } else if (_ffname == `serviceName`) {\n _ff = FormFieldCreator.serviceName()\n } else if (_ffname == `serviceStart`) {\n _ff = FormFieldCreator.serviceStart()\n } else if (_ffname == `servicePic`) {\n _ff = FormFieldCreator.servicePic()\n } else if (_ffname == `gender`) {\n _ff = FormFieldCreator.gender()\n } else if (_ffname == `birthday`) {\n _ff = FormFieldCreator.birthday()\n } else if (_ffname == `univGroup`) {\n _ff = FormFieldCreator.univGroup()\n } else if (_ffname == `companyInfoGroup`) {\n _ff = FormFieldCreator.companyInfoGroup()\n } else if (_ffname == `question`) {\n _ff = FormFieldCreator.question()\n } else if (_ffname == `wantOnlineMeeting`) {\n _ff = FormFieldCreator.wantOnlineMeeting()\n } else if (_ffname == `remarks`) {\n _ff = FormFieldCreator.remarks()\n } else if (_ffname == `satisfaction`) {\n _ff = FormFieldCreator.satisfaction()\n } else if (_ffname == `satisfactionReason`) {\n _ff = FormFieldCreator.satisfactionReason()\n } else if (_ffname == `useRepeat`) {\n _ff = FormFieldCreator.useRepeat()\n } else if (_ffname == `request`) {\n _ff = FormFieldCreator.request()\n } else if (_ffname == `nextSchedule`) {\n _ff = FormFieldCreator.nextSchedule()\n }\n if (Util.isPresent(_ff)) {\n if (Array.isArray(_ff)) {\n Array.prototype.push.apply(ffs, _ff)\n } else {\n ffs.push(_ff)\n }\n }\n }\n }\n ffs = FormField.updateIndexNum(ffs)\n return ffs\n }\n}\n","import axios from \"axios\"\nimport { DateTime } from \"luxon\"\nimport { funcName, Logger } from \"packs/common\"\n// import qs from \"qs\"\n// import isMobile from \"ismobilejs\"\nimport Appointment from \"packs/models/Appointment\"\nimport Util from \"./Util\"\nimport RoomMember from \"packs/models/RoomMember\"\nimport MessageTemplate from \"packs/models/MessageTemplate\"\nimport PossibleDate from \"packs/models/PossibleDate\"\nimport FormField from \"packs/models/FormField\"\nimport Const from \"./Const\"\nimport Room from \"packs/models/Room\"\nimport MeetingAttendeesGroup from \"packs/models/MeetingAttendeesGroup\"\n// declare var ics: any\n// const ics = require(\"ics\")\n// const { writeFileSync } = require(\"fs\")\n\n// 便利系を記載.\nexport default class TemplateUtil {\n static readonly autoLinkText = `<<調整ページリンクが自動付与されます>>`\n static readonly onlineZoomDemoURL = `https://us06web.zoom.us/j/12345678910`\n static readonly onlineTeamsDemoURL = `https://teams.microsoft.com/l/meetup_join/12345678910`\n static readonly onlineGoogleMeetDemoURL = `https://meet.google.com/XXXXXXX`\n static getTitles() {\n return [\n `<<出席者-1-氏名>>`,\n `<<出席者-1-所属名>>`,\n `<<出席者-1-電話番号>>`,\n `<<出席者-2-氏名>>`,\n `<<出席者-2-所属名>>`,\n `<<出席者-2-電話番号>>`,\n `<<出席者-3-氏名>>`,\n `<<出席者-3-所属名>>`,\n `<<出席者-3-電話番号>>`,\n `<<オーナー名>>`,\n\n `<<自分-氏名>>`,\n `<<調整タイトル>>`,\n `<<所要時間>>`,\n `<<場所/オンライン>>`,\n `<<発行されたオンライン会議URL>>`,\n\n `<<確定日時>>`,\n `<<確定開始日時>>`,\n `<<確定終了日時>>`,\n `<<日程候補-確定リンクなし>>`,\n `<<日程候補-確定リンクあり>>`,\n\n `<<出席者-1-メールアドレス>>`,\n `<<出席者-2-メールアドレス>>`,\n `<<出席者-3-メールアドレス>>`,\n `<<担当者名>>`,\n `<<担当者紹介文>>`,\n\n `<<担当者変数-1>>`,\n `<<担当者変数-2>>`,\n `<<調整ページID>>`,\n `<>`,\n `<<調整カレンダー-オーナー名>>`,\n\n `<<調整カレンダー-オーナー所属名>>`,\n `<<出席者-1-氏(分割した前半)>>`,\n `<<出席者-1-名(分割した後半)>>`,\n `<<確定開始日(年月日)>>`,\n `<<確定開始日(ハイフン)>>`,\n `<<確定開始日時(iso8601)>>`,\n `<<確定開始時間(コロンつなぎ時分秒)>>`,\n ]\n }\n\n // provider_calendar_eventに登録可能な変数\n static getFormVariables() {\n let vals = [\n `<<フォーム質問-1>>`,\n `<<フォーム回答-1>>`,\n `<<フォーム質問-2>>`,\n `<<フォーム回答-2>>`,\n `<<フォーム質問-3>>`,\n `<<フォーム回答-3>>`,\n `<<フォーム質問-4>>`,\n `<<フォーム回答-4>>`,\n `<<フォーム質問-5>>`,\n `<<フォーム回答-5>>`,\n `<<フォーム質問-6>>`,\n `<<フォーム回答-6>>`,\n `<<フォーム質問-7>>`,\n `<<フォーム回答-7>>`,\n `<<フォーム質問-8>>`,\n `<<フォーム回答-8>>`,\n `<<フォーム質問-9>>`,\n `<<フォーム回答-9>>`,\n `<<フォーム質問-10>>`,\n `<<フォーム回答-10>>`,\n ]\n return vals\n }\n\n static getBlockVariables() {\n let vals = [\n `<<オンライン会議ブロック>>`,\n `<<調整ページブロック>>`,\n `<<出席者ブロック>>`,\n `<<担当者ブロック>>`,\n `<<メモブロック>>`,\n ]\n return vals\n }\n\n static templatesForAI() {\n let vals = {\n textFieldType: [\n {\n text: `<>が○○の場合にはこちらを利用してください。`,\n },\n ],\n textareaType: [\n {\n text: `<>が、○○の相談内容の場合にはこちらを利用してください。`,\n },\n ],\n selectType: [\n {\n text: `<>が<>の場合はこちらを利用してください。`,\n },\n ],\n birthdateType: [\n {\n text: `<>が2000年より前の場合はこちらを利用してください。`,\n },\n ],\n addressType: [\n {\n text: `<>が東京都の場合はこちらを利用してください。`,\n },\n ],\n }\n return vals\n }\n\n // すべての変数を取得します.\n static getEventVariables() {\n let appoVals = this.getTitles()\n let formVals = this.getFormVariables()\n let blockVals = this.getBlockVariables()\n Array.prototype.push.apply(appoVals, formVals)\n Array.prototype.push.apply(appoVals, blockVals)\n return appoVals\n }\n\n /**\n * テンプレートに内容を代入します。\n * @param tmpText\n * @param members\n * @param owner\n * @param appo\n * @param userInfo\n * @param pds [PossibleDate[]]\n */\n static insertTemplateText(\n tmpText: string,\n members: RoomMember[],\n owner: RoomMember,\n appo: Appointment,\n userInfo: RoomMember,\n pds: PossibleDate[] = null,\n fields: FormField[] = null,\n defName: string = null,\n mailDisplayType: string = `rich`,\n room: Room = null,\n mag: MeetingAttendeesGroup = null\n ) {\n if (Util.isBlank(tmpText)) return ``\n let allValues = this.getEventVariables()\n let blockVals = this.getBlockVariables()\n let str = tmpText\n allValues.forEach((val, index) => {\n if (str.includes(val)) {\n Logger(`TemplateUtil.insertTemplateText val:${val}, index:${index} replaceします`)\n if (blockVals.includes(val) && defName == `custom` && mailDisplayType == `rich`) {\n // カスタムの場合は、あえて置換しないでブロックのまま返します.\n const re = new RegExp(val, \"g\")\n str = str.replace(re, `\\n${val}\\n`)\n } else {\n const name = this.getStringFromIndex(index, members, appo, userInfo, owner, pds, fields, room, mag)\n Logger(`TemplateUtil.insertTemplateText name:${name}`)\n const re = new RegExp(val, \"g\")\n str = str.replace(re, name)\n }\n }\n // Logger(`strを置換していきます: ${str}`)\n })\n return str\n }\n\n // indexから変数にあるデータをセットします。\n static getStringFromIndex(\n index: number,\n members: RoomMember[],\n appo: Appointment,\n userInfo: RoomMember,\n owner: RoomMember,\n pds: PossibleDate[],\n fields: FormField[],\n room: Room,\n mag: MeetingAttendeesGroup\n ): string {\n // let titles = this.getTitles()\n switch (index) {\n case 0:\n return members[0] ? members[0].name || `` : ``\n case 1:\n return members[0] ? members[0].company_name || `` : ``\n case 2:\n return members[0] ? members[0].tel || `` : ``\n case 3:\n return members[1] ? members[1].name || `` : ``\n case 4:\n return members[1] ? members[1].company_name || `` : ``\n case 5:\n return members[1] ? members[1].tel || `` : ``\n case 6:\n return members[2] ? members[2].name || `` : ``\n case 7:\n return members[2] ? members[2].company_name || `` : ``\n case 8:\n return members[2] ? members[2].tel || `` : ``\n case 9:\n return owner ? owner.name || `` : ``\n case 10:\n return userInfo ? userInfo.name || `` : ``\n case 11:\n let name = Util.isPresent(appo) ? appo.name || `` : ``\n let apc = room ? room.appeal_content : null\n if (Util.isPresent(apc) && Util.isPresent(apc.title)) {\n name = apc.title\n }\n return name\n case 12:\n return appo ? `${appo.duration}分` : ``\n case 13:\n return appo ? appo.location_name || `` : ``\n case 14:\n // 発行されたオンライン会議URL\n let locationName = appo ? appo.location_name || `` : ``\n if (locationName.includes(`(アカウント連携)`)) {\n if (locationName.includes(`Google Meet`)) {\n return this.onlineGoogleMeetDemoURL\n } else if (locationName.includes(`Teams`)) {\n return this.onlineTeamsDemoURL\n } else if (locationName.includes(`Zoom`)) {\n return this.onlineZoomDemoURL\n }\n } else {\n return ``\n }\n\n case 15:\n return appo ? appo.jp_format || `` : ``\n case 16:\n return appo ? (appo.jp_format || ``).split(`~`)[0] : ``\n case 17:\n return appo && appo.jp_format ? `${appo.jp_format.split(\")\")[0]})${appo.jp_format.split(\"~\")[1]}` || `` : ``\n case 18:\n return pds ? `${pds.map(pd => `${pd.jp_format}`).join(`\\n`)}` : ``\n case 19:\n return pds\n ? `${pds.map(pd => `${pd.jp_format} この日程で確定する`).join(`\\n`)}`\n : ``\n case 20:\n return members[0] ? members[0].email || `` : ``\n case 21:\n return members[1] ? members[1].email || `` : ``\n case 22:\n return members[2] ? members[2].email || `` : ``\n case 23:\n // `<<担当者名>>`,\n return mag ? mag.team_name || `` : ``\n case 24:\n // `<<担当者紹介文>>`,\n return mag ? mag.description || `` : ``\n case 25:\n // `<<担当者変数-1>>`,\n return mag ? mag.variable_1 || `` : ``\n case 26:\n // `<<担当者変数-2>>`,\n return mag ? mag.variable_2 || `` : ``\n case 27:\n return `調整ページID`\n case 28:\n return `https://waaq.jp/ss/XXXXX`\n case 29:\n // `<<調整カレンダー-オーナー名>>`,\n\n return `調整カレンダー-オーナー名`\n case 30:\n // `<<調整カレンダー-オーナー所属名>>`,\n return `調整カレンダー-オーナー所属名`\n\n case 31:\n // `<<出席者-1-氏(分割した前半)>>`,\n\n return `出席者-1-氏(分割した前半)`\n case 32:\n // `<<出席者-1-名(分割した後半)>>`,\n\n return `出席者-1-名(分割した後半)`\n case 33:\n // `<<確定開始日(年月日)>>`,\n\n return `確定開始日(年月日)`\n case 34:\n // `<<確定開始日(ハイフン)>>`,\n\n return `確定開始日(ハイフン)`\n case 35:\n // `<<確定開始日時(iso8601)>>`,\n return `確定開始日時(iso8601)`\n case 36:\n // `<<確定開始時間(コロンつなぎ時分秒)>>`,\n return `確定開始時間(コロンつなぎ時分秒)`\n\n //getEventVariables\n case 37:\n // 質問1\n return this.fieldsName(index, fields)\n case 38:\n // 回答1\n return this.fieldsName(index, fields)\n case 39:\n // 質問2\n return this.fieldsName(index, fields)\n case 40:\n // 回答2\n return this.fieldsName(index, fields)\n case 41:\n // 質問3\n return this.fieldsName(index, fields)\n case 42:\n // 回答3\n return this.fieldsName(index, fields)\n case 43:\n // 質問4\n return this.fieldsName(index, fields)\n case 44:\n // 回答4\n return this.fieldsName(index, fields)\n case 45:\n // 質問5\n return this.fieldsName(index, fields)\n case 46:\n // 回答5\n return this.fieldsName(index, fields)\n case 47:\n // 質問6\n return this.fieldsName(index, fields)\n case 48:\n // 回答6\n return this.fieldsName(index, fields)\n case 49:\n // 質問7\n return this.fieldsName(index, fields)\n case 50:\n // 回答7\n return this.fieldsName(index, fields)\n case 51:\n // 質問8\n return this.fieldsName(index, fields)\n case 52:\n // 回答8\n return this.fieldsName(index, fields)\n case 53:\n // 質問9\n return this.fieldsName(index, fields)\n case 54:\n // 回答9\n return this.fieldsName(index, fields)\n case 55:\n // 質問10\n return this.fieldsName(index, fields)\n case 56:\n // 回答10\n return this.fieldsName(index, fields)\n case 57:\n // `<<オンライン会議ブロック>>`,\n\n if (appo && appo.location_name == Const.zoomConnectAccount) {\n return `【Zoom Meeting】\\nアカウント: waaq@waaq.waaq\\nミーティングID: 123456789012\\nミーティングパスコード: 123456\\n\\n`\n }\n return ``\n case 58:\n // `<<調整ページブロック>>`,\n return `【waaq Link ページ】\\n限定公開ページ: R1234567\\n限定公開ページURL: https://waaq.test.jp/schedule?public_id=R1234567 ※ waaq Linkご利用ユーザーのみ有効なリンク\\n公開ページURL: https://waaq.test.jp/p/waaq/R1234567\\n\\n`\n\n case 59:\n // `<<出席者ブロック>>`,\n return `【出席者】\\n1\\n\\n`\n\n case 60:\n // `<<担当者ブロック>>`,\n return `【担当】\\n\\n\\n`\n\n case 61:\n // `<<メモブロック>>`,\n return `【メモ】\\n\\n\\n`\n }\n }\n\n static fieldsName(index: number, fields: FormField[]) {\n Logger(`${funcName()} index:${index}`)\n let num = index - this.getTitles().length\n let formindex = Math.floor(num / 2)\n if (fields) {\n let f = fields[formindex]\n if (f) {\n let name = f.field_name\n if (num % 2 == 0) {\n return `${name}`\n } else {\n return `「${name}」の回答`\n }\n }\n }\n return ``\n }\n\n static regex = /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)/\n static mailRegex =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/\n\n static buttonRegex = /\\[.*\\]\\((https?|ftp)(:\\/\\/[-_.!~*\\\\'()a-zA-Z0-9;\\/?:\\@&=+\\$,%#]+)\\)/\n static buttonTextRegex = /\\[.*\\]/\n static buttonLinkRegex = /\\((https?|ftp)(:\\/\\/[-_.!~*\\\\'()a-zA-Z0-9;\\/?:\\@&=+\\$,%#]+)\\)/\n static buttonRegexWithOptions = /\\[.*\\]\\((https?|ftp)(:\\/\\/[-_.!~*\\\\'()a-zA-Z0-9;\\/?:\\@&=+\\$,%#]+)\\)\\{.*\\}/\n static buttonOptionsRegex = /\\{.*\\}/\n static telRegex1 = /0(\\d-\\d{4}|\\d{2}-\\d{3}|\\d{3}-\\d{2}|\\d{4}-\\d)-\\d{4}/ //固定\n static telRegex2 = /(050|070|080|090)-\\d{4}-\\d{4}/ //携帯\n static telRegex3 = /0120-\\d{3}-\\d{3}/ //フリーダイヤル\n\n static processText(text: string) {\n if (Util.isBlank(text)) return []\n\n try {\n let processText = text\n\n let match\n let matchMail\n let matchObj = {}\n let count = 0\n let matchButton\n let matchButtonWithOptions\n let matchTel\n\n while ((matchButtonWithOptions = this.buttonRegexWithOptions.exec(processText)) != null) {\n Logger(matchButtonWithOptions)\n count += 1\n matchObj[`[${count}]`] = matchButtonWithOptions[0]\n processText = processText.replace(matchButtonWithOptions[0], `[${count}]`)\n }\n\n while ((matchButton = this.buttonRegex.exec(processText)) != null) {\n Logger(matchButton)\n count += 1\n matchObj[`[${count}]`] = matchButton[0]\n processText = processText.replace(matchButton[0], `[${count}]`)\n }\n\n while ((match = this.regex.exec(processText)) != null) {\n count += 1\n matchObj[`[${count}]`] = match[0]\n processText = processText.replace(match[0], `[${count}]`)\n }\n\n while ((matchMail = this.mailRegex.exec(processText)) != null) {\n Logger(matchMail)\n count += 1\n matchObj[`[${count}]`] = matchMail[0]\n processText = processText.replace(matchMail[0], `[${count}]`)\n }\n\n while ((matchTel = this.telRegex1.exec(processText)) != null) {\n Logger(matchTel)\n count += 1\n matchObj[`[${count}]`] = matchTel[0]\n processText = processText.replace(matchTel[0], `[${count}]`)\n }\n while ((matchTel = this.telRegex2.exec(processText)) != null) {\n Logger(matchTel)\n count += 1\n matchObj[`[${count}]`] = matchTel[0]\n processText = processText.replace(matchTel[0], `[${count}]`)\n }\n while ((matchTel = this.telRegex3.exec(processText)) != null) {\n Logger(matchTel)\n count += 1\n matchObj[`[${count}]`] = matchTel[0]\n processText = processText.replace(matchTel[0], `[${count}]`)\n }\n\n const keys = Object.keys(matchObj)\n\n keys.forEach(key => {\n processText = processText.replace(key, `,${matchObj[key]},`)\n })\n\n return processText.split(\",\")\n } catch (e) {\n Logger(`${funcName()} e:${e}`)\n return []\n }\n }\n\n static filledFieldsExamples(ffs: FormField[]) {\n let tempsDic = TemplateUtil.templatesForAI()\n let lists = []\n for (let ff of ffs) {\n if (ff.is_special) continue\n\n if ([`input`].includes(ff.field_type)) {\n let temp = tempsDic[`textFieldType`][0][`text`]\n let _tmpText = temp.replace(`<>`, ff.field_name)\n lists.push(_tmpText)\n } else if ([`textarea`].includes(ff.field_type)) {\n let temp = tempsDic[`textareaType`][0][`text`]\n let _tmpText = temp.replace(`<>`, ff.field_name)\n lists.push(_tmpText)\n } else if (\n FormField.selectableTypes.includes(ff.field_type) ||\n FormField.selectableWithImageTypes.includes(ff.field_type)\n ) {\n let temp = tempsDic[`selectType`][0][`text`]\n let _tmpText = temp.replace(`<>`, ff.field_name)\n let val = ff.selectable_values[0]\n _tmpText = _tmpText.replace(`<>`, val ? val.value : `○○`)\n Logger(`ff:${Util.output(ff)}, temp:${temp}, _tmpText:${_tmpText}, val:${Util.output(val)}`)\n\n lists.push(_tmpText)\n } else if (ff.field_type == `birthdate`) {\n let temp = tempsDic[`birthdateType`][0][`text`]\n let _tmpText = temp.replace(`<>`, ff.field_name)\n\n lists.push(_tmpText)\n } else if (ff.field_type == `address`) {\n let prefec = ff.selected_values[1]\n let temp = tempsDic[`addressType`][0][`text`]\n let _tmpText = temp.replace(`<>`, ff.field_name)\n\n lists.push(_tmpText)\n } else {\n continue\n }\n }\n return lists\n }\n}\n"],"names":["STORAGE_KEY_PREFIX","concat","process","navigator","appVersion","STORAGE_KEY","STORAGE_KEY_PREVIEW","STORAGE_KEY_STATUS","STORAGE_KEY_ASTAG","STORAGE_KEY_ASTAG_FROM","STORAGE_KEY_LAST_ASTAG_ID","STORAGE_KEY_APPOINTMENT","STORAGE_KEY_APPOINTMENT_PREVIEW","STORAGE_KEY_SELECTED_ROOM_ID","STORAGE_KEY_SELECTED_PARENT_ROOM_ID","STORAGE_KEY_INPUT_MESSAGES","STORAGE_KEY_UNSENT_MESSAGES","STORAGE_KEY_SCHEDULE_TYPE","STORAGE_KEY_NOT_FIX_START_TIME","STORAGE_KEY_OPEN_MESSAGE_WINDOW","STORAGE_KEY_CURRENT_ROOMS_TAB","STORAGE_KEY_SUMMARY_TAB","STORAGE_KEY_CURRENT_PROGRESS_USER","STORAGE_KEY_CURRENT_PROGRESS_FILTER","STORAGE_KEY_REFRESHER","STORAGE_KEY_OPEN_REPORT_DETAIL","STORAGE_KEY_SUGGESTED_ROOM_QUESTIONS","STORAGE_KEY_SEARCH_ROOMS_DIC","RoomStorage","storage","Util","isEmbeds","localStorage","prototype","resetAll","this","clear","save","room","setItem","JSON","stringify","_a","saveRoomPreview","e","Logger","message","removeItem","retryError","fetchRoom","parse","getItem","fetchRoomPreview","saveAction","str","fetchAction","deleteRoomInfo","saveAstag","astag","fetchAstag","_astag","systemUpdatedAt","output","AvailableScheduleTag","fetchFromJson","saveLastAstagId","astagId","fetchLastAstagId","_id","length","saveAstagFrom","fetchAstagFrom","saveAppointment","appo","fetchAppointment","saveAppointmentPreview","fetchAppointmentPreview","saveSelectedRoomKey","fetchSelectedRoomKey","saveSelectedParentRoomId","fetchSelectedParentRoomId","saveInputMessage","roomId","dic","fetchInputMessages","fetchInputMessage","saveUnsentMessages","messages","push","deleteUnsentMessagesAll","saveScheduleType","type","fetchScheduleType","saveScheduleStartTime","start_time","fetchScheduleStartTime","saveOpenMessageWindow","open","getOpenMessageWindowDic","fetchOpenMessageWindow","saveNotification","noti","fetchNotification","saveCurrentRoomsTab","tabName","whose","fetchCurrentRoomsTab","split","saveSummaryTab","fetchSummaryTab","saveCurrentProgressUserName","userName","fetchCurrentProgressUserName","saveCurrentProgressFilterName","filterName","fetchCurrentProgressFilterName","saveRefresher","refresher","n","fetchRefresher","removeRefresher","saveOpenReportUserIDs","userId","fetchOpenReportUserIDs","removeOpenReportUserIDs","filter","saveDisplayFieldsInPublicRoom","fs","fetchDisplayFieldsInPublicRoom","saveSearchedRoomsInfo","info","fetchSearchedRoomsInfo","FormFieldCreator","selectYears","startYear","endYear","years","year","fieldTypeArray","field_type","name","icon","fieldTypeSpecialInputArray","needNameAndCompany","needChukaiMenu","arr","__spreadArray","fieldTypeSpecialParamKeyArray","map","fieldTypeNoneInputArray","resetFieldValues","fields","isBlank","_i","_fs_1","_f","value_attr","selected_values","getFieldFromFieldType","_typeDic","FormField","createDefault","field_name","t","includes","createCompanyField","createCCEmailsField","createTelField","createNameField","createEmailField","createOpenScheduleMemoField","selectableTypes","selectableWithImageTypes","selectable_values","value","image_url","default_selected_values","prefectures","birthdateField","createField","indexNum","fieldType","description","placeholder","isRequired","canDelete","placeholder_attr","is_required","phone","content","addressGroup","serviceName","serviceStart","servicePic","gender","birthday","prefs","getPrefeturesArray","prefField","pr","postalcodeGroup","univGroup","univ","faculty","department","academicBackground","sl","companyInfoGroup","question","remarks","satisfaction","satisfactionReason","useRepeat","request","nextSchedule","wantOnlineMeeting","wantOnlineMeetingRule","wantNextScheduleRule","setValueFromAdditionalParams","_fields","additionalParams","_fields_1","isPresent","param_key","decodeQueryParam","vals","hff","hide_filled_fields","hideField","createFormFieldsFromArray","ffs","ffsArray","ffsArray_1","_ffname","_ff","Array","isArray","apply","updateIndexNum","selectDefaultYears","fill","_","i","DateTime","local","selectMonths","TemplateUtil","getTitles","getFormVariables","getBlockVariables","templatesForAI","textFieldType","text","textareaType","selectType","birthdateType","addressType","getEventVariables","appoVals","formVals","blockVals","insertTemplateText","tmpText","members","owner","userInfo","pds","defName","mailDisplayType","mag","_this","allValues","forEach","val","index","re","RegExp","replace","getStringFromIndex","company_name","tel","apc","appeal_content","title","duration","location_name","locationName","onlineGoogleMeetDemoURL","onlineTeamsDemoURL","onlineZoomDemoURL","jp_format","pd","join","email","team_name","variable_1","variable_2","fieldsName","Const","zoomConnectAccount","funcName","num","formindex","Math","floor","f","processText","processText_1","match","matchMail","matchObj_1","count","matchButton","matchButtonWithOptions","matchTel","buttonRegexWithOptions","exec","buttonRegex","regex","mailRegex","telRegex1","telRegex2","telRegex3","Object","keys","key","filledFieldsExamples","tempsDic","lists","ffs_1","ff","is_special","_tmpText","temp","autoLinkText","buttonTextRegex","buttonLinkRegex","buttonOptionsRegex"],"sourceRoot":""}