Files
Fleetbase-Mirror-Repo/console/app/controllers/console/admin/organizations/index.js
Ronald A. Richardson 687af92752 * Fixed: service areas/zones creation
* Tweaked: few styling improvements
* Added: view label functions to customer portal components
* Added: bulk dispatch
* Fixed: route caching by generating and providing unique name via Fleetbase `RESTRegistrar`
* Implemented: impersonation feature for system admin
* Fixed: mail settings for smtp and added support for mailgun, sendgrid, postmark and resend
* Removed: model cache
* Improved test email HTML
* Added: self hosted instance extension install instructions
* Improved: Webhooks UI
2024-11-07 18:30:30 +08:00

156 lines
3.7 KiB
JavaScript

import Controller from '@ember/controller';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
/**
* Controller for managing organizations in the admin console.
*
* @class ConsoleAdminOrganizationsController
* @extends Controller
*/
export default class ConsoleAdminOrganizationsController extends Controller {
@service store;
@service intl;
@service router;
@service filters;
@service crud;
/**
* The search query param value.
*
* @var {String|null}
*/
@tracked query;
/**
* The current page of data being viewed
*
* @var {Integer}
*/
@tracked page = 1;
/**
* The maximum number of items to show per page
*
* @var {Integer}
*/
@tracked limit = 20;
/**
* The filterable param `sort`
*
* @var {String|Array}
*/
@tracked sort = '-created_at';
/**
* The filterable param `name`
*
* @var {String}
*/
@tracked name;
/**
* The filterable param `country`
*
* @var {String}
*/
@tracked country;
/**
* Array to store the fetched companies.
*
* @var {Array}
*/
@tracked companies = [];
/**
* Queryable parameters for this controller's model
*
* @var {Array}
*/
queryParams = ['name', 'page', 'limit', 'sort'];
/**
* Columns for organization
*
* @memberof ConsoleAdminOrganizationsController
*/
columns = [
{
label: this.intl.t('common.name'),
valuePath: 'name',
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/string',
},
{
label: this.intl.t('console.admin.organizations.index.owner-name-column'),
valuePath: 'owner.name',
width: '200px',
resizable: true,
sortable: true,
},
{
label: this.intl.t('console.admin.organizations.index.owner-email-column'),
valuePath: 'owner.email',
width: '200px',
resizable: true,
sortable: true,
filterable: true,
},
{
label: this.intl.t('console.admin.organizations.index.phone-column'),
valuePath: 'owner.phone',
width: '200px',
resizable: true,
sortable: true,
filterable: true,
filterComponent: 'filter/string',
},
{
label: this.intl.t('console.admin.organizations.index.users-count-column'),
valuePath: 'users_count',
resizable: true,
sortable: true,
},
{
label: this.intl.t('common.created-at'),
valuePath: 'createdAt',
},
];
/**
* Update search query param and reset page to 1
*
* @param {Event} event
* @memberof ConsoleAdminOrganizationsController
*/
@action search(event) {
this.query = event.target.value ?? '';
this.page = 1;
}
/**
* Navigates to the organization-users route for the selected company.
*
* @method goToCompany
* @param {Object} company - The selected company.
*/
@action goToCompany(company) {
this.router.transitionTo('console.admin.organizations.index.users', company.public_id);
}
/**
* Toggles dialog to export `drivers`
*
* @void
*/
@action exportOrganization() {
const selections = this.table.selectedRows.map((_) => _.id);
this.crud.export('companies', { params: { selections } });
}
}