diff --git a/src/apis/html-page-api.js b/src/apis/html-page-api.js
index 5d99196..f06e8ef 100644
--- a/src/apis/html-page-api.js
+++ b/src/apis/html-page-api.js
@@ -51,9 +51,15 @@ class HTMLPageAPI {
return this.req.put(url, data, { headers: { 'Content-Type': 'application/json' } });
}
- listRows(page_id, table_name, start, limit) {
+ listRows(page_id, table_name, start, limit, view_name, view_config) {
const url = `${this.server}api/v2.1/universal-apps/${this.appUuid}/html-page-rows/`;
const params = { page_id, table_name, start, limit };
+ if (view_name) {
+ params.view_name = view_name;
+ }
+ if (view_config && typeof view_config === 'object') {
+ params.view_config = JSON.stringify(view_config);
+ }
return this.req.get(url, { params });
}
diff --git a/src/iframe-adapter.js b/src/iframe-adapter.js
index d62d2c3..1e4b273 100644
--- a/src/iframe-adapter.js
+++ b/src/iframe-adapter.js
@@ -10,6 +10,7 @@ export const POST_MESSAGE_REQUEST_TYPE = {
GET_ACCESS_TOKEN: 'get_access_token',
GET_APP_UUID: 'get_app_uuid',
GET_PAGE_ID: 'get_page_id',
+ GET_VIEWS: 'get_views',
};
const WINDOW_EVENT_SOURCE_TYPE = {
diff --git a/src/sdk.js b/src/sdk.js
index 2a43e9c..d9084b1 100644
--- a/src/sdk.js
+++ b/src/sdk.js
@@ -21,6 +21,15 @@ export class HTMLPageSDK {
if (!this.options.pageId) {
this.options.pageId = await this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_PAGE_ID);
}
+ // Pull preview-mode view configs (only meaningful for the ai_agent preview page).
+ // For real pages the server resolves views from app_config; the inline map is ignored server-side.
+ if (!this.options.views) {
+ try {
+ this.options.views = await this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_VIEWS);
+ } catch (e) {
+ this.options.views = null;
+ }
+ }
if (this.options.accountToken) {
// dev: try to get access-token via accountToken
const { server, accountToken, appUuid } = this.options;
@@ -34,8 +43,13 @@ export class HTMLPageSDK {
}
}
- listRows({ tableName, start, limit }) {
- return this.htmlPageAPI.listRows(this.options.pageId, tableName, start, limit);
+ listRows({ tableName, viewName, start, limit }) {
+ let viewConfig = null;
+ if (viewName && this.options.views && typeof this.options.views === 'object') {
+ const cfg = this.options.views[viewName];
+ if (cfg && typeof cfg === 'object') viewConfig = cfg;
+ }
+ return this.htmlPageAPI.listRows(this.options.pageId, tableName, start, limit, viewName, viewConfig);
}
addRow({ tableName, rowData }) {