Skip to content

Commit

Permalink
[WHIP] Updates
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Ng <chrng8@gmail.com>
  • Loading branch information
Pytal committed Sep 10, 2021
1 parent 1bf022f commit db62eb4
Show file tree
Hide file tree
Showing 32 changed files with 1,218 additions and 423 deletions.
8 changes: 4 additions & 4 deletions apps/settings/css/settings.scss
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ input {
.profile-settings-container {
display: inline-grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr 2fr;
grid-template-rows: 1fr 1fr 1fr 2fr;

#locale {
h3 {
Expand Down Expand Up @@ -223,7 +223,7 @@ select {

.personal-settings-container {
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
}

.profile-settings-container {
Expand All @@ -245,7 +245,7 @@ select {

.personal-settings-container {
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
}

.profile-settings-container {
Expand Down Expand Up @@ -279,7 +279,7 @@ select {
.personal-settings-container {
display: inline-grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr 2fr;
grid-template-rows: 1fr 1fr 1fr 2fr;

&:after {
clear: both;
Expand Down
76 changes: 66 additions & 10 deletions apps/settings/lib/Settings/Personal/PersonalInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

namespace OCA\Settings\Settings\Personal;

use OCA\FederatedFileSharing\FederatedShareProvider;
Expand All @@ -56,18 +57,25 @@ class PersonalInfo implements ISettings {

/** @var IConfig */
private $config;

/** @var IUserManager */
private $userManager;

/** @var IAccountManager */
private $accountManager;

/** @var IGroupManager */
private $groupManager;

/** @var IAppManager */
private $appManager;

/** @var IFactory */
private $l10nFactory;

/** @var IL10N */
private $l;

/** @var IInitialState */
private $initialStateService;

Expand Down Expand Up @@ -114,7 +122,7 @@ public function getForm(): TemplateResponse {
$totalSpace = \OC_Helper::humanFileSize($storageInfo['total']);
}

$languageParameters = $this->getLanguages($user);
$languageParameters = $this->getLanguageMap($user);
$localeParameters = $this->getLocales($user);
$messageParameters = $this->getMessageParameters($account);

Expand Down Expand Up @@ -147,10 +155,12 @@ public function getForm(): TemplateResponse {

$personalInfoParameters = [
'userId' => $uid,
'displayNames' => $this->getDisplayNames($account),
'emails' => $this->getEmails($account),
'languages' => $this->getLanguages($user),
'displayNameMap' => $this->getDisplayNameMap($account),
'emailMap' => $this->getEmailMap($account),
'languageMap' => $this->getLanguageMap($user),
'profileEnabled' => $this->getProfileEnabled($account),
'companyMap' => $this->getCompanyMap($account),
'jobTitleMap' => $this->getJobTitleMap($account),
];

$accountParameters = [
Expand All @@ -164,6 +174,52 @@ public function getForm(): TemplateResponse {
return new TemplateResponse('settings', 'settings/personal/personal.info', $parameters, '');
}

/**
* returns the primary company in an
* associative array
*
* NOTE may be extended to provide additional companies in the future
*
* @param IAccount $account
* @return array
*/
private function getCompanyMap(IAccount $account): array {
$primaryCompany = [
'value' => $account->getProperty(IAccountManager::PROPERTY_COMPANY)->getValue(),
'scope' => $account->getProperty(IAccountManager::PROPERTY_COMPANY)->getScope(),
'verified' => $account->getProperty(IAccountManager::PROPERTY_COMPANY)->getVerified(),
];

$companies = [
'primaryCompany' => $primaryCompany,
];

return $companies;
}

/**
* returns the primary job title in an
* associative array
*
* NOTE may be extended to provide additional job titles in the future
*
* @param IAccount $account
* @return array
*/
private function getJobTitleMap(IAccount $account): array {
$primaryJobTitle = [
'value' => $account->getProperty(IAccountManager::PROPERTY_JOB_TITLE)->getValue(),
'scope' => $account->getProperty(IAccountManager::PROPERTY_JOB_TITLE)->getScope(),
'verified' => $account->getProperty(IAccountManager::PROPERTY_JOB_TITLE)->getVerified(),
];

$jobTitles = [
'primaryJobTitle' => $primaryJobTitle,
];

return $jobTitles;
}

/**
* @return string the section ID, e.g. 'sharing'
* @since 9.1
Expand Down Expand Up @@ -211,7 +267,7 @@ static function (IGroup $group) {
* @param IAccount $account
* @return array
*/
private function getDisplayNames(IAccount $account): array {
private function getDisplayNameMap(IAccount $account): array {
$primaryDisplayName = [
'value' => $account->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getValue(),
'scope' => $account->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getScope(),
Expand All @@ -232,7 +288,7 @@ private function getDisplayNames(IAccount $account): array {
* @param IAccount $account
* @return array
*/
private function getEmails(IAccount $account): array {
private function getEmailMap(IAccount $account): array {
$primaryEmail = [
'value' => $account->getProperty(IAccountManager::PROPERTY_EMAIL)->getValue(),
'scope' => $account->getProperty(IAccountManager::PROPERTY_EMAIL)->getScope(),
Expand Down Expand Up @@ -265,7 +321,7 @@ function (IAccountProperty $property) {
* @param IUser $user
* @return array
*/
private function getLanguages(IUser $user): array {
private function getLanguageMap(IUser $user): array {
$forceLanguage = $this->config->getSystemValue('force_language', false);
if ($forceLanguage !== false) {
return [];
Expand Down Expand Up @@ -370,9 +426,9 @@ private function getMessageParameters(IAccount $account): array {
*/
private function getProfileEnabled(IAccount $account): bool {
return filter_var(
$account->getProperty(IAccountManager::PROPERTY_PROFILE_ENABLED)->getValue(),
FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE,
$account->getProperty(IAccountManager::PROPERTY_PROFILE_ENABLED)->getValue(),
FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE,
);
}
}
178 changes: 178 additions & 0 deletions apps/settings/src/components/PersonalInfo/CompanySection/Company.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
<!--
- @copyright 2021, Christopher Ng <chrng8@gmail.com>
-
- @author Christopher Ng <chrng8@gmail.com>
-
- @license GNU AGPL version 3 or any later version
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-->

<template>
<div class="company">
<input
id="company"
type="text"
:placeholder="t('settings', 'Your company')"
:value="company"
autocapitalize="none"
autocomplete="on"
autocorrect="off"
required
@input="onCompanyChange">

<div class="company__actions-container">
<transition name="fade">
<span v-if="showCheckmarkIcon" class="icon-checkmark" />
<span v-else-if="showErrorIcon" class="icon-error" />
</transition>
</div>
</div>
</template>

<script>
import { showError } from '@nextcloud/dialogs'
import { emit } from '@nextcloud/event-bus'
import debounce from 'debounce'

import { ACCOUNT_PROPERTY_ENUM } from '../../../constants/AccountPropertyConstants'
import { savePrimaryAccountProperty } from '../../../service/PersonalInfo/PersonalInfoService'
import { validateStringInput } from '../../../utils/validate'

export default {
name: 'Company',

props: {
company: {
type: String,
required: true,
},
scope: {
type: String,
required: true,
},
},

data() {
return {
initialCompany: this.company,
localScope: this.scope,
showCheckmarkIcon: false,
showErrorIcon: false,
}
},

methods: {
onCompanyChange(e) {
this.$emit('update:company', e.target.value)
this.debounceCompanyChange(e.target.value.trim())
},

debounceCompanyChange: debounce(async function(company) {
if (validateStringInput(company)) {
await this.updatePrimaryCompany(company)
}
}, 500),

async updatePrimaryCompany(company) {
try {
const responseData = await savePrimaryAccountProperty(ACCOUNT_PROPERTY_ENUM.COMPANY, company)
this.handleResponse({
company,
status: responseData.ocs?.meta?.status,
})
} catch (e) {
this.handleResponse({
errorMessage: 'Unable to update company',
error: e,
})
}
},

handleResponse({ company, status, errorMessage, error }) {
if (status === 'ok') {
// Ensure that local state reflects server state
this.initialCompany = company
emit('settings:company:updated', company)
this.showCheckmarkIcon = true
setTimeout(() => { this.showCheckmarkIcon = false }, 2000)
} else {
showError(t('settings', errorMessage))
this.logger.error(errorMessage, error)
this.showErrorIcon = true
setTimeout(() => { this.showErrorIcon = false }, 2000)
}
},

onScopeChange(scope) {
this.$emit('update:scope', scope)
},
},
}
</script>

<style lang="scss" scoped>
.company {
display: grid;
align-items: center;

input {
grid-area: 1 / 1;
width: 100%;
height: 34px;
margin: 3px 3px 3px 0;
padding: 7px 6px;
color: var(--color-main-text);
border: 1px solid var(--color-border-dark);
border-radius: var(--border-radius);
background-color: var(--color-main-background);
font-family: var(--font-face);
cursor: text;
}

.company__actions-container {
grid-area: 1 / 1;
justify-self: flex-end;
height: 30px;

display: flex;
gap: 0 2px;
margin-right: 5px;

.icon-checkmark,
.icon-error {
height: 30px !important;
min-height: 30px !important;
width: 30px !important;
min-width: 30px !important;
top: 0;
right: 0;
float: none;
}
}
}

.fade-enter,
.fade-leave-to {
opacity: 0;
}

.fade-enter-active {
transition: opacity 200ms ease-out;
}

.fade-leave-active {
transition: opacity 300ms ease-out;
}
</style>
Loading

0 comments on commit db62eb4

Please sign in to comment.