@fleetbase/registry-bridge-engine 0.0.19 → 0.1.1
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.
- package/addon/components/extension-card.hbs +34 -16
- package/addon/components/extension-card.js +2 -2
- package/addon/components/extension-form.hbs +4 -5
- package/addon/components/extension-monetize-form.hbs +1 -1
- package/addon/components/extension-pending-publish-viewer.hbs +2 -2
- package/addon/components/extension-reviewer-control.hbs +2 -2
- package/addon/components/registry-admin-config.hbs +1 -1
- package/addon/controllers/application.js +1 -4
- package/addon/controllers/explore/category.js +5 -11
- package/addon/controllers/explore/index.js +1 -0
- package/addon/engine.js +1 -34
- package/addon/extension.js +35 -0
- package/addon/routes/application.js +8 -4
- package/addon/routes/explore/category.js +7 -11
- package/addon/routes/explore/index.js +1 -2
- package/addon/templates/application.hbs +44 -8
- package/addon/templates/developers/extensions/edit/bundles.hbs +1 -1
- package/addon/templates/developers/extensions/edit/details.hbs +1 -1
- package/addon/templates/developers/extensions/index.hbs +29 -22
- package/addon/templates/developers/extensions/new.hbs +10 -7
- package/addon/templates/explore/category.hbs +15 -8
- package/addon/templates/explore/index.hbs +15 -8
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +4 -4
- package/server/src/routes.php +11 -11
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
{{
|
|
16
|
-
|
|
17
|
-
|
|
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, {
|
|
32
|
+
constructor(owner, { resource }) {
|
|
33
33
|
super(...arguments);
|
|
34
|
-
this.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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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}} @
|
|
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,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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
}
|
package/addon/engine.js
CHANGED
|
@@ -2,14 +2,9 @@ import Engine from '@ember/engine';
|
|
|
2
2
|
import loadInitializers from 'ember-load-initializers';
|
|
3
3
|
import Resolver from 'ember-resolver';
|
|
4
4
|
import config from './config/environment';
|
|
5
|
-
import services from '@fleetbase/ember-core/exports
|
|
6
|
-
import RegistryAdminConfigComponent from './components/registry-admin-config';
|
|
7
|
-
import ExtensionReviewerControlComponent from './components/extension-reviewer-control';
|
|
8
|
-
import ExtensionPendingPublishViewerComponent from './components/extension-pending-publish-viewer';
|
|
5
|
+
import { services, externalRoutes } from '@fleetbase/ember-core/exports';
|
|
9
6
|
|
|
10
7
|
const { modulePrefix } = config;
|
|
11
|
-
const externalRoutes = ['console', 'extensions'];
|
|
12
|
-
|
|
13
8
|
export default class RegistryBridgeEngine extends Engine {
|
|
14
9
|
modulePrefix = modulePrefix;
|
|
15
10
|
Resolver = Resolver;
|
|
@@ -17,34 +12,6 @@ export default class RegistryBridgeEngine extends Engine {
|
|
|
17
12
|
services,
|
|
18
13
|
externalRoutes,
|
|
19
14
|
};
|
|
20
|
-
setupExtension = function (app, engine, universe) {
|
|
21
|
-
// Register menu item in header
|
|
22
|
-
universe.registerHeaderMenuItem('Extensions', 'console.extensions', { icon: 'shapes', priority: 99, id: 'registry-bridge', slug: 'registry-bridge' });
|
|
23
|
-
// Register admin controls
|
|
24
|
-
universe.registerAdminMenuPanel(
|
|
25
|
-
'Extensions Registry',
|
|
26
|
-
[
|
|
27
|
-
{
|
|
28
|
-
title: 'Registry Config',
|
|
29
|
-
icon: 'gear',
|
|
30
|
-
component: RegistryAdminConfigComponent,
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
title: 'Awaiting Review',
|
|
34
|
-
icon: 'gavel',
|
|
35
|
-
component: ExtensionReviewerControlComponent,
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
title: 'Pending Publish',
|
|
39
|
-
icon: 'rocket',
|
|
40
|
-
component: ExtensionPendingPublishViewerComponent,
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
{
|
|
44
|
-
slug: 'extension-registry',
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
};
|
|
48
15
|
}
|
|
49
16
|
|
|
50
17
|
loadInitializers(RegistryBridgeEngine, modulePrefix);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MenuItem, ExtensionComponent } from '@fleetbase/ember-core/contracts';
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
setupExtension(app, universe) {
|
|
5
|
+
const menuService = universe.getService('menu');
|
|
6
|
+
|
|
7
|
+
// Register menu item in header
|
|
8
|
+
menuService.registerHeaderMenuItem('Extensions', 'console.extensions', { icon: 'shapes', priority: 99, id: 'registry-bridge', slug: 'registry-bridge' });
|
|
9
|
+
|
|
10
|
+
// Register admin controls
|
|
11
|
+
menuService.registerAdminMenuPanel(
|
|
12
|
+
'Extensions Registry',
|
|
13
|
+
[
|
|
14
|
+
new MenuItem({
|
|
15
|
+
title: 'Registry Config',
|
|
16
|
+
icon: 'gear',
|
|
17
|
+
component: new ExtensionComponent('@fleetbase/registry-bridge-engine', 'registry-admin-config'),
|
|
18
|
+
}),
|
|
19
|
+
new MenuItem({
|
|
20
|
+
title: 'Awaiting Review',
|
|
21
|
+
icon: 'gavel',
|
|
22
|
+
component: new ExtensionComponent('@fleetbase/registry-bridge-engine', 'extension-reviewer-control'),
|
|
23
|
+
}),
|
|
24
|
+
new MenuItem({
|
|
25
|
+
title: 'Pending Publish',
|
|
26
|
+
icon: 'rocket',
|
|
27
|
+
component: new ExtensionComponent('@fleetbase/registry-bridge-engine', 'extension-pending-publish-viewer'),
|
|
28
|
+
}),
|
|
29
|
+
],
|
|
30
|
+
{
|
|
31
|
+
slug: 'extension-registry',
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
@@ -15,9 +15,13 @@ export default class ApplicationRoute extends Route {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
}
|
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
<EmberWormhole @to="sidebar-menu-items">
|
|
2
|
-
<Layout::Sidebar::Item
|
|
3
|
-
|
|
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
|
|
7
|
-
<
|
|
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
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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}} @
|
|
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}} @
|
|
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
|
|
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
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
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
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
package/extension.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fleetbase/registry-bridge-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Internal Bridge between Fleetbase API and Extensions Registry",
|
|
5
5
|
"fleetbase": {
|
|
6
6
|
"route": "extensions"
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@babel/core": "^7.23.2",
|
|
42
|
-
"@fleetbase/ember-core": "
|
|
43
|
-
"@fleetbase/ember-ui": "
|
|
42
|
+
"@fleetbase/ember-core": "^0.3.7",
|
|
43
|
+
"@fleetbase/ember-ui": "^0.3.12",
|
|
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",
|
package/server/src/routes.php
CHANGED
|
@@ -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'
|
|
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')
|
|
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')
|
|
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'
|
|
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'))
|
|
65
|
-
$router->get('purchased', $controller('purchased'))
|
|
66
|
-
$router->get('config', $controller('getConfig'))
|
|
67
|
-
$router->post('config', $controller('saveConfig'))
|
|
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) {
|