()
| 100 | }; |
| 101 | |
| 102 | export const getInstanceIdOptionConfig = (): OptionConfig => { |
| 103 | return { |
| 104 | options: [], |
| 105 | fetch: async (instanceIds: string[]) => { |
| 106 | const { useAppStore } = await import("@/react/stores/app"); |
| 107 | // TODO(ed): batch fetch instances |
| 108 | const instances = await Promise.all( |
| 109 | instanceIds.map((instanceId) => |
| 110 | useAppStore |
| 111 | .getState() |
| 112 | .getOrFetchInstanceByName(`${instanceNamePrefix}${instanceId}`) |
| 113 | ) |
| 114 | ); |
| 115 | const options: LabeledOption[] = []; |
| 116 | for (const instance of instances) { |
| 117 | if (!isValidInstanceName(instance.name)) { |
| 118 | continue; |
| 119 | } |
| 120 | options.push(getInstanceIdOption(instance)); |
| 121 | } |
| 122 | return options; |
| 123 | }, |
| 124 | search: async (params) => { |
| 125 | const { useAppStore } = await import("@/react/stores/app"); |
| 126 | return useAppStore |
| 127 | .getState() |
| 128 | .fetchInstanceList({ |
| 129 | pageSize: params.pageSize, |
| 130 | pageToken: params.pageToken, |
| 131 | filter: { |
| 132 | query: params.search, |
| 133 | }, |
| 134 | silent: true, |
| 135 | }) |
| 136 | .then((resp) => ({ |
| 137 | nextPageToken: resp.nextPageToken, |
| 138 | options: resp.instances.map(getInstanceIdOption), |
| 139 | })); |
| 140 | }, |
| 141 | }; |
| 142 | }; |
| 143 | |
| 144 | export const getDatabaseIdOptionConfig = (parent: string): OptionConfig => { |
| 145 | return { |
no test coverage detected