Skip to content

Commit 840082b

Browse files
committed
fix(base): format resolved record share hint
1 parent b543027 commit 840082b

2 files changed

Lines changed: 48 additions & 2 deletions

File tree

shortcuts/base/base_resolve.go

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ func enrichRecordShareResolveHint(runtime *common.RuntimeContext, out map[string
349349
hint := map[string]interface{}{}
350350
if baseToken != "" && tableID != "" && recordID != "" {
351351
if record, err := getResolveRecord(runtime, baseToken, tableID, recordID); err == nil {
352-
hint["record"] = record
352+
hint["record"] = formatResolvedRecord(record)
353353
}
354354
}
355355
if baseToken != "" && tableID != "" {
@@ -366,6 +366,50 @@ func getResolveRecord(runtime *common.RuntimeContext, baseToken, tableID, record
366366
return handleBaseAPIResult(result, err, "batch get records")
367367
}
368368

369+
func formatResolvedRecord(record map[string]interface{}) map[string]interface{} {
370+
recordIDs := common.GetSlice(record, "record_id_list")
371+
fieldIDs := common.GetSlice(record, "field_id_list")
372+
fieldNames := common.GetSlice(record, "fields")
373+
rows := common.GetSlice(record, "data")
374+
375+
out := map[string]interface{}{}
376+
if len(recordIDs) > 0 {
377+
out["record_id"] = fmt.Sprintf("%v", recordIDs[0])
378+
}
379+
380+
data := map[string]interface{}{}
381+
if len(rows) > 0 {
382+
if values, ok := rows[0].([]interface{}); ok {
383+
for i, value := range values {
384+
data[resolvedRecordFieldKey(fieldIDs, fieldNames, i)] = value
385+
}
386+
}
387+
}
388+
out["data"] = data
389+
return out
390+
}
391+
392+
func resolvedRecordFieldKey(fieldIDs, fieldNames []interface{}, index int) string {
393+
fieldID := ""
394+
if index < len(fieldIDs) {
395+
fieldID = strings.TrimSpace(fmt.Sprintf("%v", fieldIDs[index]))
396+
}
397+
fieldName := ""
398+
if index < len(fieldNames) {
399+
fieldName = strings.TrimSpace(fmt.Sprintf("%v", fieldNames[index]))
400+
}
401+
switch {
402+
case fieldID != "" && fieldName != "":
403+
return fmt.Sprintf("%s(%s)", fieldID, fieldName)
404+
case fieldID != "":
405+
return fieldID
406+
case fieldName != "":
407+
return fieldName
408+
default:
409+
return fmt.Sprintf("field_%d", index+1)
410+
}
411+
}
412+
369413
func resolveHint(tableID string, extra map[string]interface{}) map[string]interface{} {
370414
hint := map[string]interface{}{}
371415
for key, value := range extra {

shortcuts/base/base_resolve_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ func TestBaseURLResolveRecordShareURL(t *testing.T) {
156156
hint, _ := data["hint"].(map[string]interface{})
157157
record, _ := hint["record"].(map[string]interface{})
158158
fields, _ := hint["fields"].(map[string]interface{})
159-
if hint["next_step"] != nextStepRecordList || record["record_id_list"] == nil || fields["total"] != float64(2) {
159+
recordData, _ := record["data"].(map[string]interface{})
160+
if hint["next_step"] != nextStepRecordList || record["record_id"] != "rec123" || recordData["fld_name(Name)"] != "Alice" || fields["total"] != float64(2) {
160161
t.Fatalf("unexpected hint: %#v", hint)
161162
}
162163
})
@@ -437,6 +438,7 @@ func recordBatchGetStub(baseToken, tableID, recordID string) *httpmock.Stub {
437438
"code": 0,
438439
"data": map[string]interface{}{
439440
"record_id_list": []interface{}{recordID},
441+
"field_id_list": []interface{}{"fld_name", "fld_status"},
440442
"fields": []interface{}{"Name", "Status"},
441443
"data": []interface{}{[]interface{}{"Alice", "Done"}},
442444
},

0 commit comments

Comments
 (0)