") ), h::td ( textarea ( set::rows(1) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ), ) ) ); }; if(!empty($api->params['header'])) { foreach($api->params['header'] as $param) { $apiHeader[] = h::tr ( setClass('input-row'), h::td ( input ( set::name(''), set::value($param['field']) ) ), h::td ( $param['required'] ? html("") : html("") ), h::td ( textarea ( set::rows(1), set::value($param['desc']) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ) ) ) ); } } else { $apiHeader[] = $defaultTR(); } if(!empty($api->params['query'])) { foreach($api->params['query'] as $query) { $apiQuery[] = h::tr ( setClass('input-row'), h::td ( input ( set::name(''), set::value($query['field']) ) ), h::td ( $query['required'] ? html("") : html("") ), h::td ( textarea ( set::rows(1), set::value($query['desc']) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ) ) ) ); } } else { $apiQuery[] = $defaultTR(); } $parseTree = function($data, $typeList, $level = 0) use (&$parseTree) { global $lang; $hidden = $data['paramsType'] == 'formData' ? 'hidden' : ''; $tbody[] = h::tr ( setClass('input-row'), setData(array('level' => $level + 1, 'key' => $data['key'], 'parent' => isset($data['parentKey']) ? $data['parentKey'] : 0)), h::td ( $level ? setStyle('padding-left', ($level + 1) * 10 . 'px') : null, input ( set::name(''), set::value($data['field']) ) ), h::td ( select ( setClass('objectType'), set::name(''), set::value($data['paramsType']), set::items($typeList) ) ), h::td ( $data['required'] ? html("") : html("") ), h::td ( textarea ( set::rows(1), set::value($data['desc']) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass("btn ghost btn-split $hidden"), icon('split') ), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ) ) ) ); if(isset($data['children']) && count($data['children']) > 0) { $level++; foreach($data['children'] as $item) $tbody[] = $parseTree($item, $typeList, $level); } return $tbody; }; if(!empty($api->params['params'])) { foreach($api->params['params'] as $param) $apiParams = array_merge($apiParams, $parseTree($param, $typeOptions)); } else { $apiParams[] = h::tr ( setClass('input-row'), setData(array('level' => 1, 'key' => 'origin', 'parent' => '0')), h::td ( input ( set::name('') ) ), h::td ( select ( setClass('objectType'), set::name(''), set::value('object'), set::items($lang->api->paramsTypeOptions) ) ), h::td ( html("") ), h::td ( textarea ( set::rows(1) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass('btn ghost btn-split hidden'), icon('split') ), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ) ) ) ); } if(!empty($api->response)) { foreach($api->response as $param) $apiResponse = array_merge($apiResponse, $parseTree($param, $typeOptions)); } else { $apiResponse[] = h::tr ( setClass('input-row'), setData(array('level' => 1, 'key' => 'origin', 'parent' => '0')), h::td ( input ( set::name('') ) ), h::td ( select ( setClass('objectType'), set::name(''), set::value('object'), set::items($lang->api->paramsTypeOptions) ) ), h::td ( html("") ), h::td ( textarea ( set::rows(1) ) ), h::td ( div ( setClass('pl-2 flex self-center line-btn'), btn ( setClass('btn ghost btn-split'), icon('split') ), btn ( setClass('btn ghost btn-add'), icon('plus') ), btn ( setClass('btn ghost btn-delete'), icon('trash') ) ) ) ); } formPanel ( to::heading ( div ( setClass('panel-title text-lg'), $title ) ), formGroup ( set::width('1/2'), set::label($lang->api->module), picker ( set::items($moduleOptionMenu), set::name('module'), set::value($api->module), set::required(true) ) ), formGroup ( set::width('1/2'), set::required(true), set::label($lang->api->title), input ( set::name('title'), set::value($api->title) ) ), formRow ( formGroup ( set::width('330px'), set::required(true), set::label($lang->api->path), inputGroup ( picker ( set::required(true), set::items($lang->api->protocalOptions), set::name('protocol'), set::value($api->protocol) ), picker ( set::required(true), set::width('1/5'), set::items($lang->api->methodOptions), set::name('method'), set::value($api->method) ) ) ), formGroup ( input ( set::name('path'), set::value($api->path) ) ) ), formGroup ( set::width('2/5'), set::label($lang->api->requestType), picker ( set::name('requestType'), set::value($api->requestType), set::items($lang->api->requestTypeOptions) ) ), formGroup ( set::label($lang->api->status), radioList ( set::name('status'), set::inline(true), set::value($api->status), set::items($lang->api->statusOptions) ) ), formGroup ( set::width('2/5'), set::label($lang->api->owner), picker ( set::name('owner'), set::items($allUsers), set::value($api->owner) ) ), formGroup ( setID('form-header'), setClass('params-group'), set::label($lang->api->header), h::table ( setClass('table condensed bordered'), h::tr ( h::th ( width('300px'), $lang->struct->field ), h::th ( width('70px'), $lang->struct->required ), h::th ( $lang->struct->desc ), h::th ( width('100px') ) ), $apiHeader ) ), formGroup ( setID('form-query'), setClass('params-group'), set::label($lang->api->query), h::table ( setClass('table condensed bordered'), h::tr ( h::th ( width('300px'), $lang->struct->field ), h::th ( width('70px'), $lang->struct->required ), h::th ( $lang->struct->desc ), h::th ( width('100px') ) ), $apiQuery ) ), formGroup ( setID('form-paramsType'), setClass('params-group'), set::label($lang->struct->type), radioList ( set::name('type'), set::inline(true), set::value(!empty($api->params['paramsType']) ? $api->params['paramsType'] : ''), set::items($lang->struct->typeOptions) ) ), formGroup ( setID('form-params'), setClass('params-group'), set::label($lang->api->params), h::table ( setClass('table condensed bordered'), h::tr ( h::th ( width('300px'), $lang->struct->field ), h::th ( width('100px'), $lang->struct->paramsType ), h::th ( width('70px'), $lang->struct->required ), h::th ( $lang->struct->desc ), h::th ( width('100px') ) ), $apiParams ) ), formHidden('params', json_encode($api->params)), formGroup ( set::width('1/2'), set::label($lang->api->paramsExample), textarea ( set::name('paramsExample'), set::value($api->paramsExample) ) ), formGroup ( setID('form-response'), setClass('response'), set::label($lang->api->response), h::table ( setClass('table condensed bordered'), h::tr ( h::th ( width('300px'), $lang->struct->field ), h::th ( width('100px'), $lang->struct->paramsType ), h::th ( width('70px'), $lang->struct->required ), h::th ( $lang->struct->desc ), h::th ( width('100px') ) ), $apiResponse ) ), formHidden('response', json_encode($api->response)), formGroup ( set::width('1/2'), set::label($lang->api->responseExample), textarea ( set::name('responseExample'), set::value($api->responseExample) ) ), formGroup ( set::label($lang->api->desc), editor ( set::name('desc'), html($api->desc) ) ), formHidden('editedDate', $api->editedDate) );