Skip to content

Commit fcf6afa

Browse files
Scarvissadcomm
authored andcommitted
RocketChat#821 [FIX] Исправление формы ввода номера у протоколов
1 parent 9d9153a commit fcf6afa

File tree

11 files changed

+183
-48
lines changed

11 files changed

+183
-48
lines changed

app/errand/client/views/creationDialog/CreateErrand.js

+34-15
Original file line numberDiff line numberDiff line change
@@ -137,21 +137,31 @@ Template.CreateErrand.events({
137137

138138
const chargedUsers = instance.selectedUsers.get();
139139
const initiatedUsers = instance.initiatedByUsers.get();
140-
const { message } = instance;
140+
141+
var message;
142+
if(instance == null){
143+
message = null;
144+
} else {
145+
message = instance.message;
146+
}
141147

142148
const reply = instance.reply.get();
143149

144-
145-
const { rid, _id: mid } = message;
150+
if(message == null) {
151+
rid = "isAbsent"
152+
mid = "isAbsent"
153+
} else {
154+
var { rid, _id: mid } = message;
155+
}
156+
146157
const initiated_by = initiatedUsers[0];
147158
const charged_to = chargedUsers[0];
148159
const expired_at = moment(instance.expiredDate.get(), moment.localeData().longDateFormat('L')).toDate();
149160

150-
151-
if (!rid) {
152-
const errorText = TAPi18n.__('Invalid_room_name', `${ rid }...`);
153-
return toastr.error(errorText);
154-
}
161+
// if (!rid) {
162+
// const errorText = TAPi18n.__('Invalid_room_name', `${ rid }...`);
163+
// return toastr.error(errorText);
164+
// }
155165
const result = await call('createErrand', { rid, mid, errandDescription, expired_at, initiated_by, charged_to, reply });
156166
// callback to enable tracking
157167
callbacks.run('afterErrand', Meteor.user(), result);
@@ -164,7 +174,11 @@ Template.CreateErrand.events({
164174
});
165175

166176
Template.CreateErrand.onRendered(function() {
167-
this.find('#usersCharged').focus();
177+
if(this.data.message == null){
178+
this.find('#usersInitiated').focus();
179+
}else{
180+
this.find('#usersCharged').focus();
181+
}
168182
this.$('#expired_date').datepicker.dates['ru'] = {
169183
days: ["Воскресение", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресение"],
170184
daysShort: ["Вос", "Пон", "Вто", "Сре", "Чет", "Пят", "Суб", "Вос"],
@@ -190,14 +204,20 @@ Template.CreateErrand.onRendered(function() {
190204
const suggestName = (msg = '') => msg.substr(0, 140);
191205

192206
Template.CreateErrand.onCreated(function() {
193-
const { message: msg } = this.data;
194-
this.message = msg;
207+
if(this.data.message != null) {
208+
var { message: msg } = this.data;
209+
this.message = msg;
210+
this.errandDescription = new ReactiveVar(suggestName(msg && msg.msg));
211+
console.log(msg.u)
212+
}else{
213+
this.message = "isAbsent";
214+
this.errandDescription = new ReactiveVar("");
215+
console.log(Meteor)
216+
}
217+
this.pmid = msg && msg._id;
195218

196-
this.errandDescription = new ReactiveVar(suggestName(msg && msg.msg));
197219
this.expiredDate = new ReactiveVar(new Date());
198220

199-
this.pmid = msg && msg._id;
200-
201221
this.reply = new ReactiveVar('');
202222

203223
this.selectedUsers = new ReactiveVar([]);
@@ -212,7 +232,6 @@ Template.CreateErrand.onCreated(function() {
212232
this.selectedUsers.set([]);
213233
};
214234

215-
216235
this.initiatedByUsers = new ReactiveVar([]);
217236
if (msg) {
218237
this.initiatedByUsers.get().unshift(msg.u);

app/errand/client/views/errandsPage/index.js

+59-15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { useEndpointData } from '../../../../../client/hooks/useEndpointData';
1010
import { useFormatDate } from '../../../../../client/hooks/useFormatDate';
1111
import { useSetModal } from '../../../../../client/contexts/ModalContext';
1212
import { EditErrandContextBar } from './EditErrand';
13+
import {modal} from '../../../../ui-utils/client';
1314

1415

1516
const style = { whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' };
@@ -45,6 +46,23 @@ function renderEditModal({ onCancel, erid, onChange, ...props }) {
4546
</Modal>;
4647
}
4748

49+
function renderAddErrandModal(){
50+
const t = useTranslation();
51+
modal.open({
52+
title: t('Errand_title'),
53+
modifier: 'modal',
54+
content: 'CreateErrand',
55+
data: {
56+
onCreate() {
57+
modal.close();
58+
},
59+
},
60+
confirmOnEnter: false,
61+
showConfirmButton: false,
62+
showCancelButton: false,
63+
});
64+
}
65+
4866
function Errands({
4967
type,
5068
data,
@@ -142,25 +160,51 @@ export function ErrandPage() {
142160

143161
const onClick = useCallback((errand) => () => setModal(() => renderEditModal({ onCancel: cancelModal, erid: errand._id, onChange: onChange, key: 'modal-errand' })), []);
144162

163+
const addErrand = useCallback(() => () => setModal(() => renderAddErrandModal()),[]);
164+
145165
const goBack = () => {
146166
window.history.back();
147167
};
148168

149-
return <Page flexDirection='row'>
150-
<Page>
151-
<Page.Header>
152-
<Field width={'100%'} display={'block'} marginBlock={'15px'}>
153-
<Button className='go-back-button' onClick={goBack}>
154-
<Icon name='back'/>
155-
</Button>
156-
<Label fontScale='h1'>{t(title)}</Label>
157-
</Field>
158-
</Page.Header>
159-
<Page.Content>
160-
<Errands type={type} setParam={setParams} params={params} onHeaderClick={onHeaderClick} data={data} onClick={onClick} sort={sort}/>;
161-
</Page.Content>
162-
</Page>
163-
</Page>;
169+
let result;
170+
if(title === 'Errands_from_me') {
171+
result = <Page flexDirection='row'>
172+
<Page>
173+
<Page.Header>
174+
<Field width={'100%'} display={'block'} marginBlock={'15px'}>
175+
<Button className='go-back-button' onClick={goBack}>
176+
<Icon name='back'/>
177+
</Button>
178+
<Label fontScale='h1'>{t(title)}</Label>
179+
</Field>
180+
<Button width={'25%'} primary small aria-label={t('New')} onClick={addErrand()}>
181+
{t('Add')}
182+
</Button>
183+
</Page.Header>
184+
<Page.Content>
185+
<Errands type={type} setParam={setParams} params={params} onHeaderClick={onHeaderClick} data={data} onClick={onClick} sort={sort}/>;
186+
</Page.Content>
187+
</Page>
188+
</Page>;
189+
} else {
190+
result = <Page flexDirection='row'>
191+
<Page>
192+
<Page.Header>
193+
<Field width={'100%'} display={'block'} marginBlock={'15px'}>
194+
<Button className='go-back-button' onClick={goBack}>
195+
<Icon name='back'/>
196+
</Button>
197+
<Label fontScale='h1'>{t(title)}</Label>
198+
</Field>
199+
</Page.Header>
200+
<Page.Content>
201+
<Errands type={type} setParam={setParams} params={params} onHeaderClick={onHeaderClick} data={data} onClick={onClick} sort={sort}/>;
202+
</Page.Content>
203+
</Page>
204+
</Page>;
205+
}
206+
207+
return result;
164208
}
165209

166210
ErrandPage.displayName = 'ErrandsPage';

app/errand/server/methods/createErrand.js

+17-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { Errands, Rooms, Messages } from '../../../models/server';
66
import { settings } from '../../../settings/server';
77

88
const createErrandMessage = (rid, mid, dsc, expired_at, initiated_by, charged_to) => Errands.createWithRoomIdMessageIdDescriptionEndDateAndUsers(rid, mid, dsc, expired_at, initiated_by, charged_to);
9+
const createErrandWithoutMentionInMessage = (rid, mid, dsc, expired_at, initiated_by, charged_to) =>
10+
Errands.createWithDescriptionAndDataAndUsers(rid, mid, dsc, expired_at, initiated_by,charged_to)
911

1012
const getRoom = (rid) => {
1113
const room = Rooms.findOne(rid);
@@ -40,15 +42,21 @@ const create = ({ rid, mid, errandDescription, expired_at, initiated_by, charged
4042
} else {
4143
rid = message.rid;
4244
}
43-
}
4445

45-
if (!rid) {
46-
throw new Meteor.Error('error-invalid-arguments', { method: 'ErrandCreation' });
46+
if (!rid) {
47+
throw new Meteor.Error('error-invalid-arguments', { method: 'ErrandCreation' });
48+
}
4749
}
48-
49-
const p_room = Rooms.findOne(rid);
50-
if (!p_room) {
51-
throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'ErrandCreation' });
50+
51+
if(rid){
52+
const p_room = Rooms.findOne(rid);
53+
if (!p_room) {
54+
throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'ErrandCreation' });
55+
}
56+
var errand = createErrandMessage(rid, mid, errandDescription, expired_at, initiated_by, charged_to); //Создание поручения с привязкой к сообщению
57+
mentionMessage(mid, errand._id); //Присваивание поручения к сообщению
58+
}else{
59+
var errand = createErrandWithoutMentionInMessage(rid, mid, errandDescription,expired_at,initiated_by, charged_to) //Создание поручения без привязки к сообщению
5260
}
5361

5462
// Этот блок не позволяет согздавать много поручений на одном и том же сообщении
@@ -64,7 +72,7 @@ const create = ({ rid, mid, errandDescription, expired_at, initiated_by, charged
6472
throw new Meteor.Error('error-errand-exists', { method: 'ErrandCreation' });
6573
}
6674
}*/
67-
const errand = createErrandMessage(rid, mid, errandDescription, expired_at, initiated_by, charged_to);
75+
6876

6977

7078
/* const errand = createErrandMessage('p', name, user.username, [...new Set(invitedUsers)], false, {
@@ -89,9 +97,6 @@ const create = ({ rid, mid, errandDescription, expired_at, initiated_by, charged
8997
sendMessage(user, { msg: reply }, errand);
9098
}*/
9199

92-
93-
mentionMessage(mid, errand._id);
94-
95100
return errand;
96101
};
97102

@@ -108,6 +113,7 @@ Meteor.methods({
108113
* @param {string} reply - The reply, optional
109114
*/
110115
createErrand({ rid, mid, errandDescription, expired_at, initiated_by, charged_to, reply }) {
116+
111117
if (!settings.get('Errand_enabled')) {
112118
throw new Meteor.Error('error-action-not-allowed', 'You are not allowed to create a errand', { method: 'createErrand' });
113119
}

app/models/server/models/Errands.js

+24
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,30 @@ export class Errands extends Base {
5151
return record;
5252
}
5353

54+
createWithDescriptionAndDataAndUsers(roomId, messageId, description, endDate, initiatedByUser, chargedToUser) {
55+
const record = {
56+
t: 'opened',
57+
rid: roomId,
58+
mid: messageId,
59+
ts: new Date(),
60+
desc: description,
61+
initiatedBy: {
62+
_id: initiatedByUser._id,
63+
username: initiatedByUser.username,
64+
name: initiatedByUser.name,
65+
},
66+
chargedToUser: {
67+
_id: chargedToUser._id,
68+
username: chargedToUser.username,
69+
name: chargedToUser.name,
70+
},
71+
expireAt: endDate,
72+
groupable: false,
73+
};
74+
record._id = this.insertOrUpsert(record);
75+
return record;
76+
}
77+
5478
// UPDATE
5579
updateErrand(_id, newData) {
5680
newData._updatedAt = new Date();

app/protocols/client/views/AddItem.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { validateItemData, createItemData } from './lib';
1212
import VerticalBar from '../../../../client/components/basic/VerticalBar';
1313
import CKEditor from "@ckeditor/ckeditor5-react";
1414
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
15+
import { checkNumberWithDot } from '../../../utils/client/methods/checkNumber';
1516

1617
export function AddItem({ goToNew, close, onChange, ...props }) {
1718
const t = useTranslation();
@@ -27,6 +28,12 @@ export function AddItem({ goToNew, close, onChange, ...props }) {
2728

2829
const insertOrUpdateItem = useMethod('insertOrUpdateItem');
2930

31+
const filterNumber = (value) => {
32+
if (checkNumberWithDot(value, number) !== null || value === '') {
33+
setNumber(value);
34+
}
35+
};
36+
3037
const saveAction = useCallback(async (number, name, responsible, expireAt) => {
3138
const itemData = createItemData(number, name, responsible, expireAt);
3239
const validation = validateItemData(itemData);
@@ -57,7 +64,7 @@ export function AddItem({ goToNew, close, onChange, ...props }) {
5764
<Field>
5865
<Field.Label>{t('Item_Number')}</Field.Label>
5966
<Field.Row>
60-
<InputBox value={number} onChange={(e) => setNumber(e.currentTarget.value)} placeholder={t('Item_Number')} />
67+
<InputBox value={number} onChange={(e) => filterNumber(e.currentTarget.value)} placeholder={t('Item_Number')} />
6168
</Field.Row>
6269
</Field>
6370
<Field>

app/protocols/client/views/AddProtocol.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { useTranslation } from '../../../../client/contexts/TranslationContext';
99
import { useMethod } from '../../../../client/contexts/ServerContext';
1010
import { validate, createProtocolData } from './lib';
1111
import VerticalBar from '../../../../client/components/basic/VerticalBar';
12+
import { checkNumberWithDot } from '../../../utils/client/methods/checkNumber';
1213

1314
require('react-datepicker/dist/react-datepicker.css');
1415

@@ -22,6 +23,12 @@ export function AddProtocol({ goToNew, close, onChange, ...props }) {
2223

2324
const insertOrUpdateProtocol = useMethod('insertOrUpdateProtocol');
2425

26+
const filterNumber = (value) => {
27+
if (checkNumberWithDot(value, number) !== null || value === '') {
28+
setNumber(value);
29+
}
30+
};
31+
2532
const saveAction = useCallback(async (date, number, place) => {
2633
const protocolData = createProtocolData(date, number, place);
2734
const validation = validate(protocolData);
@@ -51,7 +58,7 @@ export function AddProtocol({ goToNew, close, onChange, ...props }) {
5158
<Field>
5259
<Field.Label>{t('Protocol_Number')}</Field.Label>
5360
<Field.Row>
54-
<InputBox value={number} onChange={(e) => setNumber(e.currentTarget.value)} placeholder={t('Protocol_Number')} />
61+
<InputBox value={number} onChange={(e) => filterNumber(e.currentTarget.value)} placeholder={t('Protocol_Number')} />
5562
</Field.Row>
5663
</Field>
5764
<Field>

app/protocols/client/views/AddSection.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { validateSectionData, createSectionData } from './lib';
99
import VerticalBar from '../../../../client/components/basic/VerticalBar';
1010
import CKEditor from "@ckeditor/ckeditor5-react";
1111
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
12+
import { checkNumberWithDot } from '../../../utils/client/methods/checkNumber';
1213

1314
export function AddSection({ goToNew, close, onChange, ...props }) {
1415
const t = useTranslation();
@@ -21,6 +22,12 @@ export function AddSection({ goToNew, close, onChange, ...props }) {
2122

2223
const insertOrUpdateSection = useMethod('insertOrUpdateSection');
2324

25+
const filterNumber = (value) => {
26+
if (checkNumberWithDot(value, number) !== null || value === '') {
27+
setNumber(value);
28+
}
29+
};
30+
2431
const saveAction = useCallback(async (number, name) => {
2532
const sectionData = createSectionData(number, name);
2633
const validation = validateSectionData(sectionData);
@@ -49,7 +56,7 @@ export function AddSection({ goToNew, close, onChange, ...props }) {
4956
<Field>
5057
<Field.Label>{t('Section_Number')}</Field.Label>
5158
<Field.Row>
52-
<InputBox value={number} onChange={(e) => setNumber(e.currentTarget.value)} placeholder={t('Section_Number')} />
59+
<InputBox value={number} onChange={(e) => filterNumber(e.currentTarget.value)} placeholder={t('Section_Number')} />
5360
</Field.Row>
5461
</Field>
5562
<Field>

0 commit comments

Comments
 (0)