mirror of
				https://github.com/gristlabs/grist-core.git
				synced 2025-06-13 20:53:59 +00:00 
			
		
		
		
	
							parent
							
								
									d8b224b45d
								
							
						
					
					
						commit
						7bc862fb02
					
				@ -36,7 +36,7 @@ export async function collectTableSchemaInFrictionlessFormat(
 | 
			
		||||
  req: express.Request,
 | 
			
		||||
  options: DownloadOptions
 | 
			
		||||
): Promise<FrictionlessFormat> {
 | 
			
		||||
  const {tableId} = options;
 | 
			
		||||
  const {tableId, header} = options;
 | 
			
		||||
  if (!activeDoc.docData) {
 | 
			
		||||
    throw new Error('No docData in active document');
 | 
			
		||||
  }
 | 
			
		||||
@ -50,24 +50,15 @@ export async function collectTableSchemaInFrictionlessFormat(
 | 
			
		||||
    throw new ApiError(`Table ${tableId} not found.`, 404);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const data = await exportTable(activeDoc, tableRef, req);
 | 
			
		||||
  const tableSchema = columnsToTableSchema(tableId, data, settings.locale);
 | 
			
		||||
  return tableSchema;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function columnsToTableSchema(
 | 
			
		||||
  tableId: string,
 | 
			
		||||
  {tableName, columns}: {tableName: string, columns: ExportColumn[]},
 | 
			
		||||
  locale: string,
 | 
			
		||||
): FrictionlessFormat {
 | 
			
		||||
  const {tableName, columns} = await exportTable(activeDoc, tableRef, req);
 | 
			
		||||
  return {
 | 
			
		||||
    name: tableId.toLowerCase().replace(/_/g, '-'),
 | 
			
		||||
    title: tableName,
 | 
			
		||||
    schema: {
 | 
			
		||||
      fields: columns.map(col => ({
 | 
			
		||||
        name: col.label,
 | 
			
		||||
        name: col[header || "label"],
 | 
			
		||||
        ...(col.description ? {description: col.description} : {}),
 | 
			
		||||
        ...buildTypeField(col, locale),
 | 
			
		||||
        ...buildTypeField(col, settings.locale),
 | 
			
		||||
      })),
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@ -2695,6 +2695,43 @@ function testDocApi() {
 | 
			
		||||
    assert.equal(resp2.data, 'A,B\nSanta,1\nBob,11\nAlice,2\nFelix,22\n');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it("GET /docs/{did}/download/table-schema serves table-schema-encoded document with header=colId", async function () {
 | 
			
		||||
    const { docUrl, tableUrl } = await generateDocAndUrl('tableSchemaWithColIdAsHeader');
 | 
			
		||||
    const columns = [
 | 
			
		||||
      {
 | 
			
		||||
        id: 'Some_ID',
 | 
			
		||||
        fields: {
 | 
			
		||||
          label: 'Some Label',
 | 
			
		||||
          type: 'Text',
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
    ];
 | 
			
		||||
    const setupColResp = await axios.put(`${tableUrl}/columns`, { columns }, {...chimpy, params: { replaceall: true }});
 | 
			
		||||
    assert.equal(setupColResp.status, 200);
 | 
			
		||||
 | 
			
		||||
    const resp = await axios.get(`${docUrl}/download/table-schema?tableId=Table1&header=colId`, chimpy);
 | 
			
		||||
    assert.equal(resp.status, 200);
 | 
			
		||||
    const expected = {
 | 
			
		||||
      format: "csv",
 | 
			
		||||
      mediatype: "text/csv",
 | 
			
		||||
      encoding: "utf-8",
 | 
			
		||||
      dialect: {
 | 
			
		||||
        delimiter: ",",
 | 
			
		||||
        doubleQuote: true,
 | 
			
		||||
      },
 | 
			
		||||
      name: 'table1',
 | 
			
		||||
      title: 'Table1',
 | 
			
		||||
      schema: {
 | 
			
		||||
        fields: [{
 | 
			
		||||
          name: 'Some_ID',
 | 
			
		||||
          type: 'string',
 | 
			
		||||
          format: 'default',
 | 
			
		||||
        }]
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
    assert.deepInclude(resp.data, expected);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it("GET /docs/{did}/download/table-schema respects permissions", async function () {
 | 
			
		||||
    // kiwi has no access to TestDoc
 | 
			
		||||
    const resp = await axios.get(`${serverUrl}/api/docs/${docIds.TestDoc}/download/table-schema?tableId=Table1`, kiwi);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user