Merge branch 'master' of github.com:ONLYOFFICE/CommunityServer-AspNetCore

This commit is contained in:
Alexey Safronov 2019-09-02 09:24:26 +03:00
commit 09535f8a30
16 changed files with 123 additions and 32 deletions

View File

@ -11,6 +11,8 @@ import {
} from "asc-web-components";
import submit from "./submit";
import validate from "./validate";
import { useTranslation } from 'react-i18next';
import { department, headOfDepartment, typeUser } from './../../../../../../helpers/customNames';
const generateItems = numItems =>
Array(numItems)
@ -22,6 +24,7 @@ const generateItems = numItems =>
const GroupForm = props => {
const { error, handleSubmit, submitting, initialValues, history } = props;
const { t } = useTranslation();
const selectedList = generateItems(100);
@ -35,7 +38,7 @@ const GroupForm = props => {
<form onSubmit={handleSubmit(submit)}>
<div>
<label htmlFor="group-name">
<Text.Body as="span" isBold={true}>Department name:</Text.Body>
<Text.Body as="span" isBold={true}>{t('CustomDepartmentName', { department })}:</Text.Body>
</label>
<div style={{width: "320px"}}>
<TextInput id="group-name" name="group-name" scale={true} />
@ -43,11 +46,11 @@ const GroupForm = props => {
</div>
<div style={{ marginTop: "16px" }}>
<label htmlFor="head-selector">
<Text.Body as="span" isBold={true}>Head of department:</Text.Body>
<Text.Body as="span" isBold={true}>{t('CustomHeadOfDepartment', { headOfDepartment })}:</Text.Body>
</label>
<InputBlock
id="head-selector"
value="Add employee"
value={t('CustomAddEmployee', { typeUser })}
iconName="ExpanderDownIcon"
iconSize={8}
isIconFill={true}
@ -64,7 +67,7 @@ const GroupForm = props => {
</label>
<InputBlock
id="employee-selector"
value="Add employee"
value={t('CustomAddEmployee', { typeUser })}
iconName="ExpanderDownIcon"
iconSize={8}
isIconFill={true}
@ -87,9 +90,9 @@ const GroupForm = props => {
</div>
<div>{error && <strong>{error}</strong>}</div>
<div style={{ marginTop: "60px" }}>
<Button label="Save" primary type="submit" isDisabled={submitting} size="big" />
<Button label={t('SaveButton')} primary type="submit" isDisabled={submitting} size="big" />
<Button
label="Cancel"
label={t('CancelButton')}
style={{ marginLeft: "8px" }}
size="big"
isDisabled={submitting}

View File

@ -3,6 +3,8 @@ import { connect } from 'react-redux';
import { withRouter } from "react-router";
import PropTypes from "prop-types";
import { IconButton, Text } from 'asc-web-components';
import { useTranslation } from 'react-i18next';
import { department } from './../../../../../helpers/customNames';
const wrapperStyle = {
@ -16,8 +18,9 @@ const textStyle = {
const SectionHeaderContent = (props) => {
const {group, history, settings} = props;
const { t } = useTranslation();
const headerText = "New department";
const headerText = t('CustomNewDepartment', { department });
return (
<div style={wrapperStyle}>

View File

@ -0,0 +1,58 @@
import i18n from "i18next";
import Backend from "i18next-xhr-backend";
import config from "../../../../package.json";
const newInstance = i18n.createInstance();
if (process.env.NODE_ENV === "production") {
newInstance
.use(Backend)
.init({
lng: 'en',
fallbackLng: "en",
debug: true,
interpolation: {
escapeValue: false, // not needed for react as it escapes by default
format: function (value, format) {
if (format === 'lowercase') return value.toLowerCase();
return value;
}
},
react: {
useSuspense: true
},
backend: {
loadPath: `${config.homepage}/locales/GroupAction/{{lng}}/{{ns}}.json`
}
});
} else if (process.env.NODE_ENV === "development") {
const resources = {
en: {
translation: require("./locales/en/translation.json")
}
};
newInstance.init({
resources: resources,
lng: 'en',
fallbackLng: "en",
debug: true,
interpolation: {
escapeValue: false, // not needed for react as it escapes by default
format: function (value, format) {
if (format === 'lowercase') return value.toLowerCase();
return value;
}
},
react: {
useSuspense: true
}
});
}
export default newInstance;

View File

@ -3,6 +3,8 @@ import { connect } from "react-redux";
import { PageLayout } from "asc-web-components";
import { ArticleHeaderContent, ArticleMainButtonContent, ArticleBodyContent } from '../../Article';
import { SectionHeaderContent, SectionBodyContent } from './Section';
import i18n from "./i18n";
import { I18nextProvider } from "react-i18next";
class GroupAction extends React.Component {
@ -10,13 +12,15 @@ class GroupAction extends React.Component {
console.log("GroupAction render")
return (
<PageLayout
<I18nextProvider i18n={i18n}>
<PageLayout
articleHeaderContent={<ArticleHeaderContent />}
articleMainButtonContent={<ArticleMainButtonContent />}
articleBodyContent={<ArticleBodyContent />}
sectionHeaderContent={<SectionHeaderContent />}
sectionBodyContent={<SectionBodyContent />}
/>
</I18nextProvider>
);
}
}

View File

@ -0,0 +1,11 @@
{
"SaveButton": "Save",
"CancelButton": "Cancel",
"CustomHeadOfDepartment": "{{headOfDepartment}}",
"CustomAddEmployee": "Add {{typeUser, lowercase}}",
"CustomNewDepartment": "New {{department, lowercase}}",
"CustomDepartmentName": "{{department}} name"
}

View File

@ -6,7 +6,7 @@ import find from "lodash/find";
import result from "lodash/result";
import { isAdmin } from "../../../../../store/auth/selectors";
import { useTranslation } from "react-i18next";
import { typeGuest, typeUser, departmentName } from './../../../../../helpers/customNames';
import { typeGuest, typeUser, department } from './../../../../../helpers/customNames';
const getSortData = ( t ) => {
return [
@ -162,7 +162,7 @@ const SectionFilterContent = React.memo(({
label: t("LblOther"),
isHeader: true
},
{ key: "filter-type-group", group: "filter-other", subgroup: 'filter-group', label: t('CustomDepartmentName', { departmentName }) },
{ key: "filter-type-group", group: "filter-other", subgroup: 'filter-group', label: t('CustomDepartment', { department }) },
...groupOptions
];

View File

@ -45,7 +45,7 @@
"CustomTypeUser": "{{typeUser}}",
"CustomMakeUser": "Make {{typeUser, lowercase}}",
"CustomMakeGuest": "Make {{typeGuest, lowercase}}",
"CustomDepartmentName": "{{departmentName}}" ,
"CustomDepartment": "{{department}}",
"CountPerPage": "{{count}} per page",
"PageOfTotalPage": "{{page}} of {{totalPage}}"
}

View File

@ -1,7 +1,7 @@
import React, { useCallback } from "react";
import { withRouter } from "react-router";
import { useTranslation } from 'react-i18next';
import { departmentName, position, employedSinceDate } from '../../../../../helpers/customNames';
import { department as departmentName, position, employedSinceDate } from '../../../../../helpers/customNames';
import {
Text,
Avatar,
@ -190,7 +190,7 @@ const ProfileInfo = (props) => {
{department &&
<InfoItem>
<InfoItemLabel>
{t("CustomDepartmentName", { departmentName })}:
{t("CustomDepartment", { department: departmentName })}:
</InfoItemLabel>
<InfoItemValue>
{formatedDepartments}

View File

@ -30,5 +30,5 @@
"CustomEmployedSinceDate": "{{employedSinceDate}}",
"CustomPosition": "{{position}}",
"CustomDepartmentName": "{{departmentName}}"
"CustomDepartment": "{{department}}"
}

View File

@ -10,7 +10,7 @@ import PasswordField from './FormFields/PasswordField'
import DateField from './FormFields/DateField'
import RadioField from './FormFields/RadioField'
import DepartmentField from './FormFields/DepartmentField'
import { departmentName, position, employedSinceDate } from '../../../../../helpers/customNames';
import { department, position, employedSinceDate } from '../../../../../helpers/customNames';
class CreateUserForm extends React.Component {
@ -215,7 +215,7 @@ class CreateUserForm extends React.Component {
inputOnChange={this.onTextChange}
/>
<DepartmentField
labelText={`${this.props.t("CustomDepartmentName", { departmentName })}:`}
labelText={`${this.props.t("CustomDepartment", { department })}:`}
departments={this.state.profile.groups}
onRemoveDepartment={this.onGroupClose}
/>

View File

@ -10,7 +10,7 @@ import TextChangeField from './FormFields/TextChangeField'
import DateField from './FormFields/DateField'
import RadioField from './FormFields/RadioField'
import DepartmentField from './FormFields/DepartmentField'
import { departmentName, position, employedSinceDate, typeGuest, typeUser } from '../../../../../helpers/customNames';
import { department, position, employedSinceDate, typeGuest, typeUser } from '../../../../../helpers/customNames';
class UpdateUserForm extends React.Component {
@ -227,7 +227,7 @@ class UpdateUserForm extends React.Component {
inputOnChange={this.onTextChange}
/>
<DepartmentField
labelText={`${this.props.t("CustomDepartmentName", { departmentName })}:`}
labelText={`${this.props.t("CustomDepartment", { department })}:`}
departments={this.state.profile.groups}
onRemoveDepartment={this.onGroupClose}
/>

View File

@ -26,7 +26,7 @@
"CustomEmployedSinceDate": "{{employedSinceDate}}",
"CustomPosition": "{{position}}",
"CustomDepartmentName": "{{departmentName}}",
"CustomDepartment": "{{department}}",
"CustomTypeGuest": "{{typeGuest}}",
"CustomTypeUser": "{{typeUser}}"
}

View File

@ -1,4 +1,4 @@
export const departmentName = 'Department';
export const department = 'Department';
export const position = 'Position';
export const employedSinceDate = 'Employed since';
export const typeGuest = 'Guest';

View File

@ -97,5 +97,11 @@
"AboutCompanyTitle",
"LogoutButton"
]
},
"GroupAction": {
"Resource": [
"SaveButton",
"CancelButton"
]
}
}
}

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-components",
"version": "1.0.26",
"version": "1.0.27",
"description": "Ascensio System SIA component library",
"license": "AGPL-3.0",
"main": "dist/asc-web-components.cjs.js",

View File

@ -1,7 +1,7 @@
import React from "react";
import styled from 'styled-components';
import { Icons } from '../icons';
import {Popover, PopoverBody } from 'reactstrap';
import { Popover, PopoverBody } from 'reactstrap';
const Caret = styled.div`
width: 7px;
@ -10,6 +10,11 @@ const Caret = styled.div`
transform: ${props => props.isOpen ? 'rotate(180deg)' : 'rotate(0)'};
top: ${props => props.isOpen ? '2px' : '0'};
`;
const StyledPopover = styled(Popover)`
.popover{
border: none
}
`;
const StyledHideFilterButton = styled.div`
display: flex;
position: relative;
@ -53,7 +58,7 @@ class HideFilter extends React.Component {
}
toggle() {
if(!this.props.isDisabled){
if (!this.props.isDisabled) {
this.setState({
popoverOpen: !this.state.popoverOpen
});
@ -64,17 +69,18 @@ class HideFilter extends React.Component {
//console.log("HideFilter render");
return (
<StyledHideFilter>
<StyledHideFilterButton id="PopoverLegacy" isDisabled={this.props.isDisabled} >{this.props.count} <Caret isOpen={this.state.popoverOpen}><Icons.ExpanderDownIcon size='scale' isfill={true} color="#A3A9AE"/></Caret></StyledHideFilterButton>
<Popover
isOpen={this.state.popoverOpen}
trigger="legacy"
placement="bottom-start"
<StyledHideFilterButton id="PopoverLegacy" isDisabled={this.props.isDisabled} >{this.props.count} <Caret isOpen={this.state.popoverOpen}><Icons.ExpanderDownIcon size='scale' isfill={true} color="#A3A9AE" /></Caret></StyledHideFilterButton>
<StyledPopover
isOpen={this.state.popoverOpen}
trigger="legacy"
placement="bottom-start"
target="PopoverLegacy"
hideArrow={true}
hideArrow={true}
toggle={this.toggle}>
<StyledPopoverBody>{this.props.children}</StyledPopoverBody>
</Popover>
</StyledPopover>
</StyledHideFilter>
);
}