2021-08-29 19:43:09 +12:00
<?php
$new = $this->getParam('new', false);
$logs = $this->getParam('logs', null);
?>
2020-03-17 07:41:56 +13:00
< div
2021-08-09 03:59:48 +12:00
data-service="database.getCollection"
2020-03-17 07:41:56 +13:00
data-param-collection-id="{{router.params.collection}}"
data-scope="sdk"
2021-08-16 09:09:40 +12:00
data-event="load,database.updateDocument"
2021-08-09 03:59:48 +12:00
data-name="project-collection">
2021-10-28 23:41:46 +13:00
2021-08-09 03:59:48 +12:00
< div
data-service="database.getDocument"
data-param-collection-id="{{router.params.collection}}"
data-param-document-id="{{router.params.id}}"
data-scope="sdk"
2021-08-16 09:09:40 +12:00
data-event="load"
2021-08-09 03:59:48 +12:00
data-name="project-document"
data-success="default">
< div class = "cover" >
< h1 class = "zone xl margin-bottom-large" >
< a data-ls-attrs = "href=/console/database/collection?id={{router.params.collection}}&project={{router.params.project}}" class = "back text-size-small link-return-animation--start" > < i class = "icon-left-open" > < / i > < span data-ls-bind = "{{project-collection.name}}" > < / span > < / a >
< br / >
< span data-ls-if = "({{project-document.$id}})" data-ls-bind = "Document" > < / span >
< span data-ls-if = "(!{{project-document.$id}})" data-ls-bind = "Document" > < / span >
< / h1 >
2020-04-21 06:47:26 +12:00
< / div >
2021-08-09 03:59:48 +12:00
< div data-ui-modal class = "modal width-large box close" data-button-hide = "on" data-open-event = "open-json" >
< button type = "button" class = "close pull-end" data-ui-modal-close = "" > < i class = "icon-cancel" > < / i > < / button >
2021-10-28 23:41:46 +13:00
2021-08-09 03:59:48 +12:00
< h2 > JSON View< / h2 >
2020-05-03 07:57:52 +12:00
2021-08-09 03:59:48 +12:00
< div class = "margin-bottom" >
< input type = "hidden" data-ls-bind = "{{project-document}}" data-forms-code / >
< / div >
2020-05-03 07:57:52 +12:00
2021-08-09 03:59:48 +12:00
< button data-ui-modal-close = "" type = "button" class = "reverse" > Cancel< / button >
< / div >
2020-05-04 17:04:30 +12:00
2021-08-09 03:59:48 +12:00
< div class = "zone xl margin-bottom-no" >
< ul class = "phases clear" data-ui-phases data-selected = "{{router.params.tab}}" >
< li data-state = "/console/database/document?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}" >
2021-08-29 19:43:09 +12:00
< h2 class = "margin-bottom" > Overview< / h2 >
2020-05-03 07:57:52 +12:00
2021-08-29 19:43:09 +12:00
< div class = "row responsive" >
2021-08-09 03:59:48 +12:00
< div class = "col span-8 margin-bottom" >
< form
data-analytics
data-analytics-activity
data-analytics-event="submit"
data-analytics-category="console"
data-service="{{|documentAction}}"
data-name="project-document"
data-scope="sdk"
data-event="submit"
data-failure="alert"
2022-04-26 22:26:07 +12:00
data-failure-param-alert-classname="error"
<?php if ( $new ) : ?>
data-analytics-label="Create Database Document"
data-success="trigger,redirect"
data-success-param-trigger-events="database.createDocument"
data-success-param-redirect-url="/console/database/collection?id={{project-collection.$id}}& project={{router.params.project}}"
data-failure-param-alert-text="Failed to create document"
<?php else : ?>
data-analytics-label="Update Database Document"
data-success="trigger,alert"
data-success-param-trigger-events="database.updateDocument"
data-success-param-alert-text="Your document was updated"
data-failure-param-alert-text="Failed to update document"
<?php endif ; ?>
>
2021-09-27 03:30:21 +13:00
2021-08-16 09:09:40 +12:00
< input type = "hidden" name = "collectionId" data-ls-bind = "{{project-collection.$id}}" / >
2021-08-29 19:43:09 +12:00
<?php if ( ! $new ) : ?> < input type = "hidden" name = "documentId" data-ls-bind = "{{project-document.$id}}" /> <?php endif ; ?>
2020-05-03 07:57:52 +12:00
2021-08-09 03:59:48 +12:00
< div class = "box" >
2021-08-29 19:43:09 +12:00
<?php if ( $new ) : ?>
< label for = "documentId" > Document ID< / label >
< input
type="hidden"
data-custom-id
data-id-type="auto"
data-validator="database.getDocument"
required
maxlength="36"
name="documentId"
2021-11-24 21:33:12 +13:00
id="documentId"
maxlength="36"
2022-03-23 01:31:52 +13:00
pattern="^[a-zA-Z0-9][a-zA-Z0-9._-]{0,35}$" />
2021-08-29 19:43:09 +12:00
<?php endif ; ?>
2021-12-03 22:53:33 +13:00
< fieldset name = "data" data-cast-to = "object" data-ls-attrs = "x-init=doc = {{project-document}}" x-data = "{doc: {}}" >
< ul data-ls-attrs = "x-init=attributes = {{project-collection.attributes}}" x-data = "{attributes: []}" >
2022-01-01 02:02:19 +13:00
< template x-for = "attr in attributes.filter(a => a.status === 'available')" >
2021-12-03 22:53:33 +13:00
< li >
< label >
< div x-text = "attr.key" class = "margin-bottom-tiny" > < / div >
< span x-show = "attr.required" class = "text-size-xs text-danger text-fade" > required< / span >
< span x-show = "!attr.required" class = "text-size-xs text-fade" > optional< / span >
< / label >
< template x-if = "!attr.array" >
< div >
< template x-if = "attr.type === 'integer'" >
< input
type="number"
step="1"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:min="attr.min"
:max="attr.max"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key]"
data-cast-to="integer" />
< / template >
< template x-if = "attr.type === 'double'" >
< input
type="number"
2022-03-10 10:13:36 +13:00
step="any"
2021-12-03 22:53:33 +13:00
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:min="attr.min"
:max="attr.max"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key]"
2022-01-17 23:47:22 +13:00
data-cast-to="float" />
2021-12-03 22:53:33 +13:00
< / template >
< template x-if = "attr.type === 'boolean'" >
< input
class="button switch margin-bottom"
type="checkbox"
:name="attr.key"
:checked="doc[attr.key]" />
< / template >
< template x-if = "attr.type === 'string' && !attr.format" >
< textarea
data-forms-text-resize
data-forms-text-direction
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:maxlength="attr.size"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'ip'" >
< textarea
data-forms-text-resize
data-forms-text-direction
pattern="((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'email'" >
< textarea
data-forms-text-resize
data-forms-text-direction
type="email"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'url'" >
< textarea
data-forms-text-resize
data-forms-text-direction
type="url"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'enum'" >
< select
2022-01-27 04:04:50 +13:00
:required="attr.required"
2021-12-03 22:53:33 +13:00
:name="attr.key"
data-cast-to="string">
2022-01-27 04:04:50 +13:00
< option :disabled = "attr.required" selected label = " " > < / option >
2021-12-03 22:53:33 +13:00
< template x-for = "element in attr.elements" >
< option
:value="element"
x-text="element"
:selected="doc[attr.key] === element">< / option >
< / template >
< / select >
< / template >
2021-08-30 18:36:30 +12:00
< / div >
2021-12-03 22:53:33 +13:00
< / template >
< template x-if = "attr.array" >
< div >
< input type = "hidden" :required = "attr.required" :name = "attr.key" data-cast-to = "array-empty" >
< template x-for = "(node, index) in doc[attr.key]" >
< div class = "row responsive thin margin-bottom-tiny" >
< div class = "col span-11 margin-bottom-small" >
< template x-if = "attr.type === 'integer'" >
< input
type="number"
step="1"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:min="attr.min"
:max="attr.max"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key][index]"
data-cast-to="integer" />
< / template >
< template x-if = "attr.type === 'double'" >
< input
type="number"
2022-03-10 10:13:36 +13:00
step="any"
2021-12-03 22:53:33 +13:00
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:min="attr.min"
:max="attr.max"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key][index]"
2022-01-17 23:47:22 +13:00
data-cast-to="float" />
2021-12-03 22:53:33 +13:00
< / template >
< template x-if = "attr.type === 'boolean'" >
< input
class="button switch"
:class="(doc[attr.key].length - 1) === index ? 'margin-bottom' : ''"
type="checkbox"
:name="attr.key"
2021-12-07 04:56:55 +13:00
:value="attr.key"
2021-12-03 22:53:33 +13:00
:checked="doc[attr.key][index]" />
< / template >
< template x-if = "attr.type === 'string' && !attr.format" >
< textarea
data-forms-text-resize
data-forms-text-direction
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
2022-04-23 00:10:16 +12:00
:maxlength="attr.size"
2021-12-03 22:53:33 +13:00
x-model="doc[attr.key][index]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'ip'" >
< textarea
data-forms-text-resize
data-forms-text-direction
pattern="((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key][index]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'email'" >
< textarea
data-forms-text-resize
data-forms-text-direction
type="email"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key][index]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'url'" >
< textarea
data-forms-text-resize
data-forms-text-direction
type="url"
:placeholder="attr.default"
:name="attr.key"
:required="attr.required"
x-model="doc[attr.key][index]"
data-cast-to="string">< / textarea >
< / template >
< template x-if = "attr.format === 'enum'" >
< select
2022-01-27 04:04:50 +13:00
:required="attr.required"
2021-12-03 22:53:33 +13:00
:name="attr.key"
data-cast-to="string">
2022-04-21 02:02:57 +12:00
< option :disabled = "attr.required" selected label = " " > < / option >
2022-01-27 04:04:50 +13:00
2022-04-21 02:02:57 +12:00
< template x-for = "element in attr.elements" >
2021-12-03 22:53:33 +13:00
< option
:value="element"
x-text="element"
:selected="doc[attr.key][index] === element">< / option >
< / template >
< / select >
< / template >
< / div >
< div class = "col span-1 margin-bottom-small" >
< button type = "button" class = "dark danger small round pull-end" style = "margin-top: 10px;" @ click = "doc[attr.key].splice(index, 1)" > < i class = "icon-cancel" > < / i > < / button >
< / div >
2021-11-10 22:43:51 +13:00
< / div >
2021-12-03 22:53:33 +13:00
< / template >
< button type = "button" class = "margin-end margin-bottom-small reverse" @ click = "doc = addAttribute(doc, attr.key)" > Add Attribute < / button >
2021-11-10 22:43:51 +13:00
< / div >
2021-12-03 22:53:33 +13:00
< / template >
< / li >
< / template >
2021-08-16 09:09:40 +12:00
< / ul >
< / fieldset >
2020-06-13 23:13:53 +12:00
< div class = "toggle margin-bottom" data-ls-ui-open data-button-aria = "Open Permissions" >
2020-05-03 07:57:52 +12:00
< i class = "icon-plus pull-end margin-top-tiny" > < / i >
< i class = "icon-minus pull-end margin-top-tiny" > < / i >
2021-08-09 17:47:05 +12:00
2020-05-03 07:57:52 +12:00
< h3 class = "margin-bottom-large" > Permissions< / h3 >
2021-08-09 17:47:05 +12:00
2020-06-13 23:13:53 +12:00
< label for = "collection-read" > Read Access < span class = "text-size-small" > (< a data-ls-attrs = "href={{env.HOME}}/docs/permissions" target = "_blank" rel = "noopener" > Learn more< / a > )< / span > < / label >
2021-08-16 09:09:40 +12:00
< input type = "hidden" id = "collection-read" name = "read" data-forms-tags data-cast-to = "json" data-ls-bind = "{{project-document.$read}}" placeholder = "User ID, Team ID or Role" / >
2021-08-09 17:47:05 +12:00
< div class = "text-fade text-size-xs margin-top-negative-small margin-bottom" > Add 'role:all' for wildcard access< / div >
2020-05-30 22:21:36 +12:00
2020-06-13 23:13:53 +12:00
< label for = "collection-write" > Write Access < span class = "text-size-small" > (< a data-ls-attrs = "href={{env.HOME}}/docs/permissions" target = "_blank" rel = "noopener" > Learn more< / a > )< / label >
2021-08-16 09:09:40 +12:00
< input type = "hidden" id = "collection-write" name = "write" data-forms-tags data-cast-to = "json" data-ls-bind = "{{project-document.$write}}" placeholder = "User ID, Team ID or Role" / >
2021-08-09 17:47:05 +12:00
< div class = "text-fade text-size-xs margin-top-negative-small margin-bottom" > Add 'role:all' for wildcard access< / div >
2020-05-03 07:57:52 +12:00
< / div >
< button data-ls-if = "({{project-document.$id}})" > Update< / button >
< button data-ls-if = "(!{{project-document.$id}})" > Create< / button >
2021-08-09 03:59:48 +12:00
< / div >
2020-05-03 07:57:52 +12:00
2021-08-09 03:59:48 +12:00
< / form >
2020-05-03 07:57:52 +12:00
< / div >
2021-08-09 03:59:48 +12:00
< div class = "col span-4 sticky-top" >
2020-05-03 07:57:52 +12:00
2021-08-09 03:59:48 +12:00
< div data-ls-if = "({{project-document.$id}})" >
< label > Document ID< / label >
< div class = "input-copy margin-bottom" >
< input type = "text" autocomplete = "off" placeholder = "" data-ls-bind = "{{project-document.$id}}" disabled data-forms-copy class = "margin-bottom-no" / >
< / div >
< / div >
2020-03-30 08:38:15 +13:00
2021-08-09 03:59:48 +12:00
< label > Collection ID< / label >
< div class = "input-copy margin-bottom" >
< input type = "text" autocomplete = "off" placeholder = "" data-ls-bind = "{{router.params.collection}}" disabled data-forms-copy class = "margin-bottom-no" / >
< / div >
2020-03-30 08:38:15 +13:00
2021-08-09 03:59:48 +12:00
< ul class = "margin-bottom-large text-fade text-size-small" data-ls-if = "({{project-document.$id}})" >
< li class = "margin-bottom-small" > < i class = "icon-angle-circled-right margin-start-tiny margin-end-tiny" > < / i > < button data-ls-ui-trigger = "open-json" class = "link text-size-small" > View as JSON< / button > < / li >
< / ul >
< div data-ls-if = "({{project-document.$id}})" >
< form name = "database.deleteDocument" class = "margin-bottom"
data-analytics
data-analytics-activity
data-analytics-event="submit"
data-analytics-category="console"
data-analytics-label="Delete Collection Document"
data-service="database.deleteDocument"
data-event="submit"
data-param-collection-id="{{router.params.collection}}"
data-param-document-id="{{project-document.$id}}"
data-confirm="Are you sure you want to delete this document?"
data-success="alert,trigger,redirect"
data-success-param-alert-text="Document deleted successfully"
data-success-param-trigger-events="database.deleteDocument"
data-success-param-redirect-url="/console/database/collection?id={{router.params.collection}}& project={{router.params.project}}"
data-failure="alert"
data-failure-param-alert-text="Failed to delete collection"
data-failure-param-alert-classname="error">
< button type = "submit" class = "danger fill" > Delete Document< / button >
< / form >
< / div >
2020-03-30 08:38:15 +13:00
< / div >
2020-03-17 07:41:56 +13:00
< / div >
2021-08-09 03:59:48 +12:00
< / li >
2021-08-29 19:43:09 +12:00
<?php if ( ! $new ) : ?>
< li data-state = "/console/database/document/activity?id={{router.params.id}}&collection={{router.params.collection}}&project={{router.params.project}}" >
2022-01-05 22:30:14 +13:00
< h2 > Activity< / h2 >
2021-08-29 19:43:09 +12:00
2021-10-28 23:41:46 +13:00
<?php echo $logs -> render (); ?>
2021-08-29 19:43:09 +12:00
< / li >
<?php endif ; ?>
2021-08-09 03:59:48 +12:00
< / ul >
< / div >
2020-03-17 07:41:56 +13:00
< / div >
2021-08-29 19:43:09 +12:00
< / div >