1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-01-29 18:52:22 +01:00

spaces tour

This commit is contained in:
Sylvain 2020-02-24 16:57:41 +01:00
parent 76c1b69b7a
commit e6f2e60997
5 changed files with 123 additions and 31 deletions

View File

@ -152,7 +152,6 @@ Application.Controllers.controller('EditTrainingController', [ '$scope', '$state
*/
Application.Controllers.controller('TrainingsAdminController', ['$scope', '$state', '$uibModal', 'Training', 'trainingsPromise', 'machinesPromise', '_t', 'growl', 'dialogs', 'Member', 'uiTourService',
function ($scope, $state, $uibModal, Training, trainingsPromise, machinesPromise, _t, growl, dialogs, Member, uiTourService) {
/* PUBLIC SCOPE */
// list of trainings
$scope.trainings = trainingsPromise;

View File

@ -182,6 +182,8 @@ const _reserveMachine = function (machine, e) {
*/
Application.Controllers.controller('MachinesController', ['$scope', '$state', '_t', 'Machine', '$uibModal', 'machinesPromise', 'Member', 'uiTourService',
function ($scope, $state, _t, Machine, $uibModal, machinesPromise, Member, uiTourService) {
/* PUBLIC SCOPE */
// Retrieve the list of machines
$scope.machines = machinesPromise;
@ -233,7 +235,7 @@ Application.Controllers.controller('MachinesController', ['$scope', '$state', '_
if ($scope.machines.length > 0) {
uitour.createStep({
selector: '.machines-list .show-button',
stepId: 'machines',
stepId: 'view',
order: 1,
title: _t('app.public.tour.machines.view.title'),
content: _t('app.public.tour.machines.view.content'),

View File

@ -98,30 +98,116 @@ class SpacesController {
/**
* Controller used in the public listing page, allowing everyone to see the list of spaces
*/
Application.Controllers.controller('SpacesController', ['$scope', '$state', 'spacesPromise', function ($scope, $state, spacesPromise) {
// Retrieve the list of spaces
$scope.spaces = spacesPromise;
Application.Controllers.controller('SpacesController', ['$scope', '$state', 'spacesPromise', '_t', 'Member', 'uiTourService',
function ($scope, $state, spacesPromise, _t, Member, uiTourService) {
/* PUBLIC SCOPE */
/**
* Redirect the user to the space details page
*/
$scope.showSpace = function (space) { $state.go('app.public.space_show', { id: space.slug }); };
// Retrieve the list of spaces
$scope.spaces = spacesPromise;
/**
* Callback to book a reservation for the current space
*/
$scope.reserveSpace = function (space) { $state.go('app.logged.space_reserve', { id: space.slug }); };
/**
* Redirect the user to the space details page
*/
$scope.showSpace = function (space) { $state.go('app.public.space_show', { id: space.slug }); };
// Default: we show only enabled spaces
$scope.spaceFiltering = 'enabled';
/**
* Callback to book a reservation for the current space
*/
$scope.reserveSpace = function (space) { $state.go('app.logged.space_reserve', { id: space.slug }); };
// Available options for filtering spaces by status
$scope.filterDisabled = [
'enabled',
'disabled',
'all'
];
}]);
// Default: we show only enabled spaces
$scope.spaceFiltering = 'enabled';
// Available options for filtering spaces by status
$scope.filterDisabled = [
'enabled',
'disabled',
'all'
];
/**
* Setup the feature-tour for the spaces page. (admins only)
* This is intended as a contextual help (when pressing F1)
*/
$scope.setupSpacesTour = function () {
// setup the tour for admins only
if ($scope.currentUser && $scope.currentUser.role === 'admin') {
// get the tour defined by the ui-tour directive
const uitour = uiTourService.getTourByName('spaces');
// TODO add the steps
uitour.createStep({
selector: 'body',
stepId: 'welcome',
order: 0,
title: _t('app.public.tour.spaces.welcome.title'),
content: _t('app.public.tour.spaces.welcome.content'),
placement: 'bottom',
orphan: true
});
if ($scope.spaces.length > 0) {
uitour.createStep({
selector: '.spaces-list .show-button',
stepId: 'view',
order: 1,
title: _t('app.public.tour.spaces.view.title'),
content: _t('app.public.tour.spaces.view.content'),
placement: 'top'
});
}
uitour.createStep({
selector: 'body',
stepId: 'conclusion',
order: 2,
title: _t('app.public.tour.conclusion.title'),
content: _t('app.public.tour.conclusion.content'),
placement: 'bottom',
orphan: true
});
// on tour end, save the status in database
uitour.on('ended', function () {
if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile.tours.indexOf('spaces') < 0) {
Member.completeTour({ id: $scope.currentUser.id }, { tour: 'spaces' }, function (res) {
$scope.currentUser.profile.tours = res.tours;
});
}
});
// if the user has never seen the tour, show him now
if ($scope.currentUser.profile.tours.indexOf('spaces') < 0) {
uitour.start();
}
// start this tour when an user press F1 - this is contextual help
window.addEventListener('keydown', handleF1);
}
}
/* PRIVATE SCOPE */
/**
* Kind of constructor: these actions will be realized first when the controller is loaded
*/
const initialize = function () {
// listen the $destroy event of the controller to remove the F1 key binding
$scope.$on('$destroy', function () {
window.removeEventListener('keydown', handleF1);
});
}
/**
* Callback used to trigger the feature tour when the user press the F1 key.
* @param e {KeyboardEvent}
*/
const handleF1 = function (e) {
if (e.key === 'F1') {
e.preventDefault();
const tour = uiTourService.getTourByName('spaces');
if (tour) { tour.start(); }
}
};
// !!! MUST BE CALLED AT THE END of the controller
return initialize();
}
]);
/**
* Controller used in the space creation page (admin)

View File

@ -20,7 +20,12 @@
</section>
<section class="m-lg">
<section class="m-lg spaces-list"
ui-tour="spaces"
ui-tour-backdrop="true"
ui-tour-template-url="'<%= asset_path "shared/tour-step-template.html" %>'"
ui-tour-use-hotkeys="true"
post-render="setupSpacesTour">
<div class="form-group row">
<div class="input-group col-md-3 m-l-lg m-b">
@ -53,7 +58,7 @@
</div>
</div>
<div class="no-padder" ng-class="{'col-sm-6': !space.disabled}">
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showSpace(space)">
<div class="btn btn-default btn-block padder-v no-b red show-button" ng-click="showSpace(space)">
<i class="fa fa-eye m-r-xs"></i>
<span class="hidden-sm" translate>{{ 'app.shared.buttons.consult' }}</span>
</div>

View File

@ -433,12 +433,12 @@ fr:
view:
title: "Consulter"
content: "Pour modifier ou supprimer une machine, cliquez tout d'abord ici. Vous ne pourrez par supprimer une machine qui a déjà été associée à des créneaux de disponibilité, mais vous pourrez la désactiver."
spaces:
welcome:
title: "Gérer les espaces"
content: "<p>Les espaces sont des lieux que vous mettez à disposition de vos utilisateurs. Par exemple, une salle de réunion ou un atelier bois. Vous devez créer ici les espaces qui pourront ensuite être réservées par les membres.</p><p>La spécificité des espaces est qu'ils peuvent être réservés par plusieurs utilisateurs en même temps.</p>"
view:
title: "Consulter"
content: "Pour modifier ou supprimer un espace, cliquez tout d'abord ici. Vous ne pourrez par supprimer un espace qui a déjà été associée à des créneaux de disponibilité, mais vous pourrez le désactiver."
spaces:
welcome:
title: "Gérer les espaces"
content: "<p>Les espaces sont des lieux que vous mettez à disposition de vos utilisateurs. Par exemple, une salle de réunion ou un atelier bois. Vous devez créer ici les espaces qui pourront ensuite être réservées par les membres.</p><p>La spécificité des espaces est qu'ils peuvent être réservés par plusieurs utilisateurs en même temps.</p>"
view:
title: "Consulter"
content: "Pour modifier ou supprimer un espace, cliquez tout d'abord ici. Vous ne pourrez par supprimer un espace qui a déjà été associée à des créneaux de disponibilité, mais vous pourrez le désactiver."