@fleetbase/registry-bridge-engine 0.0.18 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,35 @@
1
- <button type="button" class="extension-card-container hover:opacity-50 {{@buttonClass}}" ...attributes {{on "click" this.onClick}} {{did-update this.onExtensionUpdated @extension}}>
2
- <div class="extension-card-icon-container {{@iconWrapperClass}}">
3
- <Image src={{@extension.icon_url}} class={{@iconClass}} alt={{@extension.name}} @fallbackSrc={{config "defaultValues.extensionIcon"}} />
4
- </div>
5
- <div class="extension-card-body-container {{@detailsWrapperClass}}">
6
- <div class="flex flex-col">
7
- <div class="font-semibold text-sm block {{@nameTextClass}}">{{@extension.name}}</div>
8
- <div class="text-xs {{@descriptionTextClass}}">{{n-a @extension.description}}</div>
9
- {{#if @extension.payment_required}}
10
- <Badge @status="success" @hideStatusDot={{true}}>{{format-currency @extension.price @extension.currency}}</Badge>
11
- {{else}}
12
- <Badge @status="success" @hideStatusDot={{true}}>Free</Badge>
13
- {{/if}}
1
+ <Layout::Resource::Card {{on "click" this.onClick}} {{did-update this.onExtensionUpdated @resource}} ...attributes as |Card|>
2
+ <Card.header class={{@headerClass}}>
3
+ <div class="flex flex-row items-center justify-between">
4
+ <div class="font-semibold">{{@resource.name}}</div>
5
+ <div>
6
+ {{#if @resource.payment_required}}
7
+ <Badge @status="success" @hideStatusDot={{true}}>{{format-currency @resource.price @resource.currency}}</Badge>
8
+ {{else}}
9
+ <Badge @status="success" @hideStatusDot={{true}}>Free</Badge>
10
+ {{/if}}
11
+ </div>
14
12
  </div>
15
- {{yield @extension}}
16
- </div>
17
- </button>
13
+ {{#if (has-block "header")}}
14
+ {{yield to="header"}}
15
+ {{/if}}
16
+ </Card.header>
17
+ <Card.body class={{@bodyClass}}>
18
+ <Image src={{@resource.icon_url}} alt={{@resource.name}} @fallbackSrc={{config "defaultValues.extensionIcon"}} class="card-img-lg {{@iconClass}}" />
19
+ {{#if (has-block "body")}}
20
+ {{yield to="body"}}
21
+ {{/if}}
22
+ </Card.body>
23
+ <Card.footer class={{@footerClass}}>
24
+ <div>
25
+ <p class="text-xs">{{n-a @extension.description}}</p>
26
+ </div>
27
+ {{#if (has-block "footer")}}
28
+ {{yield to="footer"}}
29
+ {{/if}}
30
+ <div class="mt-1">
31
+ <div class="text-gray-300 dark:text-gray-500 text-xs">Last Modified: {{@resource.updatedAt}}</div>
32
+ </div>
33
+ </Card.footer>
34
+ </Layout::Resource::Card>
35
+ {{yield}}
@@ -29,9 +29,9 @@ export default class ExtensionCardComponent extends Component {
29
29
  @service abilities;
30
30
  @tracked extension;
31
31
 
32
- constructor(owner, { extension }) {
32
+ constructor(owner, { resource }) {
33
33
  super(...arguments);
34
- this.extension = extension;
34
+ this.extension = resource;
35
35
  this.checkForCheckoutSession();
36
36
  }
37
37
 
@@ -28,7 +28,7 @@
28
28
  </FileUpload>
29
29
  </div>
30
30
  <div class="flex-1 px-6 space-y-6">
31
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.details-content-block"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
31
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.details-content-block"}} @open={{true}} @wrapperClass="bordered-classic">
32
32
  <InputGroup
33
33
  @name={{t "registry-bridge.developers.extensions.extension-form.extension-name"}}
34
34
  @value={{@extension.name}}
@@ -98,7 +98,7 @@
98
98
  </p>
99
99
  </InputGroup>
100
100
  </ContentPanel>
101
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-bundle"}} @open={{true}} @pad={{false}} @panelBodyClass="bg-white dark:bg-gray-800">
101
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-bundle"}} @open={{true}} @wrapperClass="bordered-classic">
102
102
  <div class="px-4 pb-4 pt-3 flex flex-col flex-grow-0">
103
103
  <Button @type="magic" @icon="box-archive" @text="Select Bundle" @onClick={{this.selectBundle}} />
104
104
  {{#if @extension.next_bundle_filename}}
@@ -116,9 +116,8 @@
116
116
  <ContentPanel
117
117
  @title={{t "registry-bridge.developers.extensions.extension-form.extension-listing-details"}}
118
118
  @open={{true}}
119
- @pad={{true}}
120
- @panelBodyClass="bg-white dark:bg-gray-800"
121
119
  @actionButtons={{this.listingDetailsPanelActions}}
120
+ @wrapperClass="bordered-classic"
122
121
  >
123
122
  <InputGroup
124
123
  @name={{t "registry-bridge.developers.extensions.extension-form.extension-promotional-text"}}
@@ -178,7 +177,7 @@
178
177
  />
179
178
  </div>
180
179
  </ContentPanel>
181
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-screenshots"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
180
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-screenshots"}} @open={{true}} @wrapperClass="bordered-classic">
182
181
  <div class="space-y-4">
183
182
  {{#if this.isUploading}}
184
183
  <div
@@ -1,4 +1,4 @@
1
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-payment-details"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
1
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.extension-payment-details"}} @open={{true}} @wrapperClass="bordered-classic">
2
2
  {{#if this.lookupStripeConnectAccount.isRunning}}
3
3
  <div class="flex items-center justify-center flex-1 p-4">
4
4
  <Spinner @loadingMessage="Loading monetization settings..." @loadingMessageClass="ml-2 text-black dark:text-white" @wrapperClass="flex flex-row items-center" />
@@ -1,5 +1,5 @@
1
1
  <div class="space-y-4">
2
- <ContentPanel @title={{t "registry-bridge.component.extension-pending-publish-viewer.content-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
2
+ <ContentPanel @title={{t "registry-bridge.component.extension-pending-publish-viewer.content-panel-title"}} @open={{true}} @wrapperClass="bordered-classic">
3
3
  <div class="grid grid-cols-1 lg:grid-cols-4">
4
4
  {{#each this.extensions as |extension|}}
5
5
  <div class="flex flex-col">
@@ -51,7 +51,7 @@
51
51
  </ContentPanel>
52
52
 
53
53
  {{#if this.focusedExtension}}
54
- <ContentPanel @title={{t "registry-bridge.component.extension-pending-publish-viewer.focused-extension-title" extensionName=this.focusedExtension.name}} @open={{true}} @pad={{true}}>
54
+ <ContentPanel @title={{t "registry-bridge.component.extension-pending-publish-viewer.focused-extension-title" extensionName=this.focusedExtension.name}} @open={{true}} @wrapperClass="bordered-classic">
55
55
  <div class="flex items-center mb-4 px-1">
56
56
  <Button @type="primary" @size="sm" @icon="check" @text={{t "common.done"}} @onClick={{this.unfocusExtension}} class="w-full" />
57
57
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="space-y-4">
2
- <ContentPanel @title={{t "registry-bridge.component.extension-reviewer-control.content-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
2
+ <ContentPanel @title={{t "registry-bridge.component.extension-reviewer-control.content-panel-title"}} @open={{true}} @wrapperClass="bordered-classic">
3
3
  <div class="grid grid-cols-1 lg:grid-cols-4">
4
4
  {{#each this.extensions as |extension|}}
5
5
  <div class="flex flex-col">
@@ -57,7 +57,7 @@
57
57
  </ContentPanel>
58
58
 
59
59
  {{#if this.focusedExtension}}
60
- <ContentPanel @title={{t "registry-bridge.component.extension-reviewer-control.focused-extension-title" extensionName=this.focusedExtension.name}} @open={{true}} @pad={{true}}>
60
+ <ContentPanel @title={{t "registry-bridge.component.extension-reviewer-control.focused-extension-title" extensionName=this.focusedExtension.name}} @open={{true}} @wrapperClass="bordered-classic">
61
61
  <div class="flex items-center mb-4 px-1">
62
62
  <Button @type="primary" @size="sm" @icon="check" @text={{t "common.done"}} @onClick={{this.unfocusExtension}} class="w-full" />
63
63
  </div>
@@ -1,4 +1,4 @@
1
- <ContentPanel @title="Registry Configuration" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
1
+ <ContentPanel @title="Registry Configuration" @open={{true}} @wrapperClass="bordered-classic">
2
2
  <InputGroup @name="Registry Host" @value={{this.registryHost}} disabled={{or this.getConfigValues.isRunning this.saveConfigValues.isRunning}} />
3
3
  <InputGroup @name="Registry Token" @value={{this.registryToken}} disabled={{or this.getConfigValues.isRunning this.saveConfigValues.isRunning}} />
4
4
  </ContentPanel>
@@ -1,6 +1,3 @@
1
1
  import Controller from '@ember/controller';
2
- import { tracked } from '@glimmer/tracking';
3
2
 
4
- export default class ApplicationController extends Controller {
5
- @tracked categories = [];
6
- }
3
+ export default class ApplicationController extends Controller {}
@@ -1,22 +1,16 @@
1
1
  import Controller from '@ember/controller';
2
2
  import { tracked } from '@glimmer/tracking';
3
- import { inject as service } from '@ember/service';
4
3
  import { task, timeout } from 'ember-concurrency';
5
4
 
6
5
  export default class ExploreCategoryController extends Controller {
7
- @service store;
8
- @tracked extensions = [];
9
- @tracked query;
10
6
  queryParams = ['query'];
7
+ @tracked query;
11
8
 
12
9
  @task({ restartable: true }) *search(event) {
13
- this.query = event.target.value;
14
- yield timeout(300);
15
-
16
- if (this.query) {
17
- this.extensions = yield this.store.query('registry-extension', { explore: 1, category: this.model.id, query: this.query });
18
- } else {
19
- this.extensions = yield this.store.query('registry-extension', { explore: 1, category: this.model.id });
10
+ const query = event.target.value;
11
+ if (query) {
12
+ this.query = query;
13
+ yield timeout(300);
20
14
  }
21
15
  }
22
16
  }
@@ -3,6 +3,7 @@ import { tracked } from '@glimmer/tracking';
3
3
  import { task, timeout } from 'ember-concurrency';
4
4
 
5
5
  export default class ExploreIndexController extends Controller {
6
+ queryParams = ['query'];
6
7
  @tracked query;
7
8
 
8
9
  @task({ restartable: true }) *search(event) {
package/addon/engine.js CHANGED
@@ -19,7 +19,7 @@ export default class RegistryBridgeEngine extends Engine {
19
19
  };
20
20
  setupExtension = function (app, engine, universe) {
21
21
  // Register menu item in header
22
- universe.registerHeaderMenuItem('Extensions', 'console.extensions', { icon: 'shapes', priority: 99, slug: 'registry-bridge' });
22
+ universe.registerHeaderMenuItem('Extensions', 'console.extensions', { icon: 'shapes', priority: 99, id: 'registry-bridge', slug: 'registry-bridge' });
23
23
  // Register admin controls
24
24
  universe.registerAdminMenuPanel(
25
25
  'Extensions Registry',
@@ -15,9 +15,13 @@ export default class ApplicationRoute extends Route {
15
15
  }
16
16
  }
17
17
 
18
- async setupController(controller) {
19
- super.setupController(...arguments);
20
- // controller.categories = await this.store.query('category', { for: 'extension_category', core_category: 1 });
21
- controller.categories = await this.fetch.get('categories', {}, { namespace: '~registry/v1', normalizeToEmberData: true, modelType: 'category' });
18
+ model() {
19
+ return this.fetch.get('categories', {}, { namespace: '~registry/v1', normalizeToEmberData: true, modelType: 'category' });
22
20
  }
21
+
22
+ // async setupController(controller) {
23
+ // super.setupController(...arguments);
24
+ // // controller.categories = await this.store.query('category', { for: 'extension_category', core_category: 1 });
25
+ // controller.categories = await this.fetch.get('categories', {}, { namespace: '~registry/v1', normalizeToEmberData: true, modelType: 'category' });
26
+ // }
23
27
  }
@@ -21,18 +21,14 @@ export default class ExploreCategoryRoute extends Route {
21
21
  }
22
22
  }
23
23
 
24
- model({ slug }) {
25
- return this.store.queryRecord('category', { slug, for: 'extension_category', core_category: 1, single: 1 });
26
- }
24
+ async model({ slug, query }) {
25
+ try {
26
+ const category = await this.store.queryRecord('category', { slug, for: 'extension_category', core_category: 1, single: 1 });
27
+ if (!category) return [];
27
28
 
28
- async setupController(controller, model) {
29
- super.setupController(...arguments);
30
- const params = { explore: 1, category: model.id };
31
- const query = controller.query;
32
- if (query) {
33
- params.query = controller.query;
29
+ return this.store.query('registry-extension', { explore: 1, category: category.id, query: query });
30
+ } catch {
31
+ return [];
34
32
  }
35
-
36
- controller.extensions = await this.store.query('registry-extension', params);
37
33
  }
38
34
  }
@@ -21,8 +21,7 @@ export default class ExploreIndexRoute extends Route {
21
21
  }
22
22
  }
23
23
 
24
- model(params) {
25
- const { query } = params;
24
+ model({ query }) {
26
25
  return this.store.query('registry-extension', { explore: 1, query });
27
26
  }
28
27
  }
@@ -1,17 +1,53 @@
1
1
  <EmberWormhole @to="sidebar-menu-items">
2
- <Layout::Sidebar::Item @route="console.extensions.installed" @icon="inbox" @permission="registry-bridge list extension-install" @visible={{can "registry-bridge see extension-install"}}>Installed</Layout::Sidebar::Item>
3
- <Layout::Sidebar::Item @route="console.extensions.purchased" @icon="bag-shopping" @permission="registry-bridge list extension-purchase" @visible={{can "registry-bridge see extension-purchase"}}>Purchased</Layout::Sidebar::Item>
2
+ <Layout::Sidebar::Item
3
+ @route="console.extensions.installed"
4
+ @icon="inbox"
5
+ @permission="registry-bridge list extension-install"
6
+ @visible={{can "registry-bridge see extension-install"}}
7
+ >Installed</Layout::Sidebar::Item>
8
+ <Layout::Sidebar::Item
9
+ @route="console.extensions.purchased"
10
+ @icon="bag-shopping"
11
+ @permission="registry-bridge list extension-purchase"
12
+ @visible={{can "registry-bridge see extension-purchase"}}
13
+ >Purchased</Layout::Sidebar::Item>
4
14
  <Layout::Sidebar::Panel @open={{true}} @title="Explore" @visible={{can "registry-bridge see extension"}}>
5
15
  <Layout::Sidebar::Item @route="console.extensions.explore.index" @icon="shapes" @permission="registry-bridge list extension">Explore All</Layout::Sidebar::Item>
6
- {{#each this.categories as |category|}}
7
- <Layout::Sidebar::Item @route="console.extensions.explore.category" @model={{category}} @icon={{category.icon}} @permission="registry-bridge list extension">{{category.name}}</Layout::Sidebar::Item>
16
+ {{#each @model as |category|}}
17
+ <LinkTo @route="explore.category" @model={{category.slug}} @disabled={{cannot "registry-bridge list extension"}} class="next-nav-item">
18
+ <div class="next-nav-item-icon-container">
19
+ <FaIcon @icon={{category.icon}} @size="xs" />
20
+ </div>
21
+ <div class="truncate w-10/12">{{category.name}}</div>
22
+ <div class="next-nav-item-right-side" />
23
+ </LinkTo>
8
24
  {{/each}}
9
25
  </Layout::Sidebar::Panel>
10
26
  <Layout::Sidebar::Panel @open={{true}} @title="Developers">
11
- <Layout::Sidebar::Item @route="console.extensions.developers.extensions" @icon="box-archive" @permission="registry-bridge list extension-bundle" @visible={{can "registry-bridge see extension-bundle"}}>Extensions</Layout::Sidebar::Item>
12
- <Layout::Sidebar::Item @route="console.extensions.developers.analytics" @icon="chart-simple" @permission="registry-bridge list extension-analytic" @visible={{can "registry-bridge see extension-analytic"}}>Analytics</Layout::Sidebar::Item>
13
- <Layout::Sidebar::Item @route="console.extensions.developers.payments" @icon="cash-register" @permission="registry-bridge list extension-payment" @visible={{can "registry-bridge see extension-payment"}}>Payments</Layout::Sidebar::Item>
14
- <Layout::Sidebar::Item @route="console.extensions.developers.credentials" @icon="key" @permission="registry-bridge list registry-token" @visible={{can "registry-bridge see registry-token"}}>Credentials</Layout::Sidebar::Item>
27
+ <Layout::Sidebar::Item
28
+ @route="console.extensions.developers.extensions"
29
+ @icon="box-archive"
30
+ @permission="registry-bridge list extension-bundle"
31
+ @visible={{can "registry-bridge see extension-bundle"}}
32
+ >Extensions</Layout::Sidebar::Item>
33
+ <Layout::Sidebar::Item
34
+ @route="console.extensions.developers.analytics"
35
+ @icon="chart-simple"
36
+ @permission="registry-bridge list extension-analytic"
37
+ @visible={{can "registry-bridge see extension-analytic"}}
38
+ >Analytics</Layout::Sidebar::Item>
39
+ <Layout::Sidebar::Item
40
+ @route="console.extensions.developers.payments"
41
+ @icon="cash-register"
42
+ @permission="registry-bridge list extension-payment"
43
+ @visible={{can "registry-bridge see extension-payment"}}
44
+ >Payments</Layout::Sidebar::Item>
45
+ <Layout::Sidebar::Item
46
+ @route="console.extensions.developers.credentials"
47
+ @icon="key"
48
+ @permission="registry-bridge list registry-token"
49
+ @visible={{can "registry-bridge see registry-token"}}
50
+ >Credentials</Layout::Sidebar::Item>
15
51
  </Layout::Sidebar::Panel>
16
52
  <Spacer @height="200px" />
17
53
  </EmberWormhole>
@@ -1,5 +1,5 @@
1
1
  <div class="flex-1">
2
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.bundles"}} @open={{true}} @pad={{false}} @panelBodyClass="bg-white dark:bg-gray-800">
2
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.bundles"}} @open={{true}} @wrapperClass="bordered-classic">
3
3
  <div class="px-4 pb-4 pt-2">
4
4
  <div>
5
5
  <FileUpload
@@ -1,5 +1,5 @@
1
1
  <div class="flex-1">
2
- <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.details"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
2
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.details"}} @open={{true}} @wrapperClass="bordered-classic">
3
3
  <InputGroup
4
4
  @name={{t "registry-bridge.developers.extensions.extension-form.extension-id"}}
5
5
  @value={{@model.public_id}}
@@ -1,27 +1,34 @@
1
1
  <Layout::Section::Header @title={{t "registry-bridge.developers.extensions.extensions"}}>
2
- <Button @type="primary" @size="sm" @icon="circle-plus" @text={{t "registry-bridge.developers.extensions.create-new-extension"}} @onClick={{transition-to "developers.extensions.new"}} @permission="registry-bridge create registry-bundle" />
2
+ <Button
3
+ @type="primary"
4
+ @size="sm"
5
+ @icon="circle-plus"
6
+ @text={{t "registry-bridge.developers.extensions.create-new-extension"}}
7
+ @onClick={{transition-to "developers.extensions.new"}}
8
+ @permission="registry-bridge create registry-bundle"
9
+ />
3
10
  </Layout::Section::Header>
4
11
 
5
12
  <Layout::Section::Body class="overflow-y-scroll h-full">
6
- <div class="m-auto p-8">
7
- <div class="extension-card-grid-container">
8
- {{#each (filter-by "isNew" false @model) as |extension|}}
9
- <button type="button" class="extension-card-container hover:opacity-50" {{on "click" (transition-to "developers.extensions.edit" extension)}}>
10
- <div class="extension-card-icon-container">
11
- <Image src={{extension.icon_url}} class="w-full h-36 rounded-t-lg" alt={{extension.name}} @fallbackSrc={{config "defaultValues.extensionIcon"}} />
12
- </div>
13
- <div class="extension-card-body-container">
14
- <div class="flex flex-col">
15
- <div class="font-semibold text-sm block">{{extension.name}}</div>
16
- <div class="text-xs truncate">{{n-a extension.description}}</div>
17
- </div>
18
- <div>
19
- <Badge @status={{extension.status}} />
20
- </div>
21
- </div>
22
- </button>
23
- {{/each}}
24
- </div>
25
- </div>
26
- <Spacer @height="300px" />
13
+ <Layout::Resource::CardsGrid
14
+ @resource="registry-extension"
15
+ @data={{filter-by "isNew" false @model}}
16
+ @gap="sm"
17
+ @columns="4"
18
+ @showPagination={{true}}
19
+ @page={{this.page}}
20
+ @onPageChange={{fn (mut this.page)}}
21
+ @paginationMeta={{@model.meta}}
22
+ @containerClass="p-4"
23
+ class="h-full"
24
+ as |Item|
25
+ >
26
+ <ExtensionCard @resource={{Item.model}}>
27
+ <:footer>
28
+ <div class="flex flex-row items-center space-x-1">
29
+ <Button @icon="eye" @size="xs" @onClick={{fn (transition-to "developers.extensions.edit" Item.model)}} />
30
+ </div>
31
+ </:footer>
32
+ </ExtensionCard>
33
+ </Layout::Resource::CardsGrid>
27
34
  </Layout::Section::Body>
@@ -4,12 +4,7 @@
4
4
  <div class="container">
5
5
  <div class="max-w-3xl mx-auto mt-4">
6
6
  <div class="flex-1 px-6">
7
- <ContentPanel
8
- @title={{t "registry-bridge.developers.extensions.extension-form.details-content-block"}}
9
- @open={{true}}
10
- @pad={{true}}
11
- @panelBodyClass="bg-white dark:bg-gray-800"
12
- >
7
+ <ContentPanel @title={{t "registry-bridge.developers.extensions.extension-form.details-content-block"}} @open={{true}} @wrapperClass="bordered-classic">
13
8
  <InputGroup
14
9
  @name={{t "registry-bridge.developers.extensions.extension-form.extension-name"}}
15
10
  @value={{this.extension.name}}
@@ -29,7 +24,15 @@
29
24
  </InputGroup>
30
25
  </ContentPanel>
31
26
  <div class="mt-4 flex items-center space-x-4">
32
- <Button @size="lg" @type="primary" @text="Continue" @icon="check" @onClick={{perform this.save}} @isLoading={{not this.save.isIdle}} @permission="registry-bridge create registry-bundle" />
27
+ <Button
28
+ @size="lg"
29
+ @type="primary"
30
+ @text="Continue"
31
+ @icon="check"
32
+ @onClick={{perform this.save}}
33
+ @isLoading={{not this.save.isIdle}}
34
+ @permission="registry-bridge create registry-bundle"
35
+ />
33
36
  <Button @size="lg" @type="default" @text="Cancel" @icon="times" @onClick={{this.cancel}} />
34
37
  </div>
35
38
  </div>
@@ -1,12 +1,19 @@
1
1
  <Layout::Section::Header @searchQuery={{this.query}} @onSearch={{perform this.search}} @title={{t "registry-bridge.developers.extensions.explore.explore-extensions"}} />
2
2
 
3
3
  <Layout::Section::Body class="overflow-y-scroll h-full">
4
- <div class="m-auto p-8">
5
- <div class="extension-card-grid-container">
6
- {{#each this.extensions as |extension|}}
7
- <ExtensionCard @extension={{extension}} />
8
- {{/each}}
9
- </div>
10
- </div>
11
- <Spacer @height="300px" />
4
+ <Layout::Resource::CardsGrid
5
+ @resource="registry-extension"
6
+ @data={{@model}}
7
+ @gap="sm"
8
+ @columns="4"
9
+ @showPagination={{true}}
10
+ @page={{this.page}}
11
+ @onPageChange={{fn (mut this.page)}}
12
+ @paginationMeta={{@model.meta}}
13
+ @containerClass="p-4"
14
+ class="h-full"
15
+ as |Item|
16
+ >
17
+ <ExtensionCard @resource={{Item.model}} />
18
+ </Layout::Resource::CardsGrid>
12
19
  </Layout::Section::Body>
@@ -1,12 +1,19 @@
1
1
  <Layout::Section::Header @searchQuery={{this.query}} @onSearch={{perform this.search}} @title={{t "registry-bridge.developers.extensions.explore.explore-extensions"}} />
2
2
 
3
3
  <Layout::Section::Body class="overflow-y-scroll h-full">
4
- <div class="m-auto p-8">
5
- <div class="extension-card-grid-container">
6
- {{#each @model as |extension|}}
7
- <ExtensionCard @extension={{extension}} />
8
- {{/each}}
9
- </div>
10
- </div>
11
- <Spacer @height="300px" />
4
+ <Layout::Resource::CardsGrid
5
+ @resource="registry-extension"
6
+ @data={{@model}}
7
+ @gap="sm"
8
+ @columns="4"
9
+ @showPagination={{true}}
10
+ @page={{this.page}}
11
+ @onPageChange={{fn (mut this.page)}}
12
+ @paginationMeta={{@model.meta}}
13
+ @containerClass="p-4"
14
+ class="h-full"
15
+ as |Item|
16
+ >
17
+ <ExtensionCard @resource={{Item.model}} />
18
+ </Layout::Resource::CardsGrid>
12
19
  </Layout::Section::Body>
package/composer.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbase/registry-bridge",
3
- "version": "0.0.18",
3
+ "version": "0.1.0",
4
4
  "description": "Internal Bridge between Fleetbase API and Extensions Registry",
5
5
  "keywords": [
6
6
  "fleetbase-extension",
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Registry Bridge",
3
- "version": "0.0.18",
3
+ "version": "0.1.0",
4
4
  "description": "Internal Bridge between Fleetbase API and Extensions Registry",
5
5
  "repository": "https://github.com/fleetbase/registry-bridge",
6
6
  "license": "AGPL-3.0-or-later",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fleetbase/registry-bridge-engine",
3
- "version": "0.0.18",
3
+ "version": "0.1.0",
4
4
  "description": "Internal Bridge between Fleetbase API and Extensions Registry",
5
5
  "fleetbase": {
6
6
  "route": "extensions"
@@ -43,8 +43,8 @@
43
43
  "@fleetbase/ember-ui": "latest",
44
44
  "@fortawesome/ember-fontawesome": "^2.0.0",
45
45
  "@fortawesome/fontawesome-svg-core": "6.4.0",
46
- "@fortawesome/free-solid-svg-icons": "6.4.0",
47
46
  "@fortawesome/free-brands-svg-icons": "6.4.0",
47
+ "@fortawesome/free-solid-svg-icons": "6.4.0",
48
48
  "@stripe/connect-js": "^3.3.10",
49
49
  "ember-auto-import": "^2.7.4",
50
50
  "ember-cli-babel": "^8.2.0",
@@ -187,8 +187,17 @@ class RegistryAuthController extends Controller
187
187
  return response()->json(['allowed' => true]);
188
188
  }
189
189
 
190
+ // if no identity provided
191
+ if (!$identity) {
192
+ return response()->error('No identity provided.', 401);
193
+ }
194
+
190
195
  // Get registry user via identity
191
- $registryUser = RegistryUser::findFromUsername($identity);
196
+ try {
197
+ $registryUser = RegistryUser::findFromUsername($identity);
198
+ } catch (\Exception $e) {
199
+ return response()->error($e->getMessage(), 401);
200
+ }
192
201
 
193
202
  // If registry user is admin allow access
194
203
  if ($registryUser->is_admin) {
@@ -22,20 +22,20 @@ Route::prefix(config('internals.api.routing.prefix', '~registry'))->middleware([
22
22
  */
23
23
  $router->group(['prefix' => config('internals.api.routing.internal_prefix', 'v1'), 'namespace' => 'Internal\v1'], function ($router) {
24
24
  $router->group(['prefix' => 'auth'], function ($router) {
25
- $router->group(['middleware' => ['fleetbase.protected', 'throttle:60,1']], function ($router) {
25
+ $router->group(['middleware' => ['fleetbase.protected']], function ($router) {
26
26
  $router->get('registry-tokens', 'RegistryAuthController@getRegistryTokens');
27
27
  $router->delete('registry-tokens/{id}', 'RegistryAuthController@deleteRegistryToken');
28
28
  $router->post('registry-tokens', 'RegistryAuthController@createRegistryUser');
29
29
  });
30
30
 
31
- $router->post('composer-auth', 'RegistryAuthController@composerAuthentication')->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
32
- $router->post('authenticate', 'RegistryAuthController@authenticate')->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
33
- $router->post('add-user', 'RegistryAuthController@addUser')->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
34
- $router->post('check-access', 'RegistryAuthController@checkAccess')->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
35
- $router->post('check-publish', 'RegistryAuthController@checkPublishAllowed')->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
31
+ $router->post('composer-auth', 'RegistryAuthController@composerAuthentication');
32
+ $router->post('authenticate', 'RegistryAuthController@authenticate');
33
+ $router->post('add-user', 'RegistryAuthController@addUser');
34
+ $router->post('check-access', 'RegistryAuthController@checkAccess');
35
+ $router->post('check-publish', 'RegistryAuthController@checkPublishAllowed');
36
36
  });
37
37
 
38
- $router->group(['middleware' => ['fleetbase.protected', 'throttle:60,1']], function ($router) {
38
+ $router->group(['middleware' => ['fleetbase.protected']], function ($router) {
39
39
  $router->get('categories', 'RegistryController@categories');
40
40
  $router->get('engines', 'RegistryController@getInstalledEngines');
41
41
  $router->get('engine-install-status', 'RegistryController@getEngineInstallStatus');
@@ -61,10 +61,10 @@ Route::prefix(config('internals.api.routing.prefix', '~registry'))->middleware([
61
61
  $router->post('publish', $controller('manualPublish'));
62
62
  $router->get('download-bundle', $controller('downloadBundle'));
63
63
  $router->get('analytics', $controller('analytics'));
64
- $router->get('installed', $controller('installed'))->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
65
- $router->get('purchased', $controller('purchased'))->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
66
- $router->get('config', $controller('getConfig'))->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
67
- $router->post('config', $controller('saveConfig'))->middleware([Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class]);
64
+ $router->get('installed', $controller('installed'));
65
+ $router->get('purchased', $controller('purchased'));
66
+ $router->get('config', $controller('getConfig'));
67
+ $router->post('config', $controller('saveConfig'));
68
68
  });
69
69
 
70
70
  $router->fleetbaseRoutes('registry-extension-bundles', function ($router, $controller) {