Skip to content

Commit 091baed

Browse files
committed
RocketChat#759 [EDIT] Укорочена ссылка в приглашении на мероприятие
1 parent cbdab42 commit 091baed

File tree

10 files changed

+34
-18
lines changed

10 files changed

+34
-18
lines changed

app/api/server/lib/councils.js

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ export async function findOneCouncil(_id) {
2424
return cursor;
2525
}
2626

27+
export async function findOneCouncilByInviteLink(inviteLink) {
28+
const cursor = await Councils.findCouncilByInviteLink({ inviteLink }, {});
29+
return cursor;
30+
}
31+
2732
export async function findCouncil(_id) {
2833
const cursor = await Councils.findOne({ _id });
2934
return cursor;

app/api/server/v1/councils.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { API } from '../api';
2-
import { findCouncils, findOneCouncil, findCouncil } from '../lib/councils';
2+
import { findCouncils, findOneCouncil, findCouncil, findOneCouncilByInviteLink } from '../lib/councils';
33
import { hasPermission } from '../../../authorization';
44

55
API.v1.addRoute('councils.list', { authRequired: true }, {
@@ -29,10 +29,16 @@ API.v1.addRoute('councils.getOne', { authRequired: false }, {
2929
},
3030
});
3131

32+
API.v1.addRoute('councils.getOneByInviteLink', { authRequired: false }, {
33+
get() {
34+
const { query } = this.parseJsonQuery();
35+
return API.v1.success(Promise.await(findOneCouncilByInviteLink(query.inviteLink)));
36+
},
37+
});
38+
3239
API.v1.addRoute('councils.findOne', { authRequired: true }, {
3340
get() {
3441
const { query } = this.parseJsonQuery();
3542
return API.v1.success(Promise.await(findCouncil(query._id)));
3643
},
3744
});
38-

app/councils/client/views/AddCouncil.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ function AddCouncilWithNewData({ council, onChange, context }) {
202202
const councilData = createCouncilData(date, description, { previousDate, previousDescription, _id }, invitedUsers);
203203
const validation = validate(councilData);
204204
if (validation.length === 0) {
205-
const _id = await insertOrUpdateCouncil(councilData);
206-
goBack();
205+
const { _id, ts } = await insertOrUpdateCouncil(councilData);
206+
//console.log(ts.getTime().toString().substr(0, 9));
207207
}
208208
validation.forEach((error) => { throw new Error({ type: 'error', message: t('error-the-field-is-required', { field: t(error) }) }); });
209209
}, [_id, dispatchToastMessage, insertOrUpdateCouncil, date, description, invitedUsers, previousDate, previousDescription, previousCouncil, t]);
@@ -212,6 +212,7 @@ function AddCouncilWithNewData({ council, onChange, context }) {
212212
await saveAction(date, description, invitedUsers);
213213
dispatchToastMessage({ type: 'success', message: t('Council_edited') });
214214
onChange();
215+
goBack();
215216
}, [saveAction, onChange]);
216217

217218
const onDeleteParticipantConfirm = (invitedUser) => () => {

app/councils/client/views/Council.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export function CouncilPage() {
9797
}
9898
};
9999

100-
const address = settings.get('Site_Url') + 'invite/council/' + councilId;
100+
const address = settings.get('Site_Url') + 'i/' + data.inviteLink || '';
101101

102102
const header = useMemo(() => [
103103
<Th key={'fio'} color='default'>{t('Council_participant')}</Th>,

app/councils/client/views/invite/InvitePageState.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { createContext, useContext, useEffect, useState, useCallback, useMemo } from 'react';
2-
import {Box, Skeleton, Scrollable, Margins, InputBox} from '@rocket.chat/fuselage';
2+
import { Box, Skeleton, Scrollable, Margins, InputBox } from '@rocket.chat/fuselage';
33

44
import { useRouteParameter, useRoute } from '../../../../../client/contexts/RouterContext';
55
import InviteStepperPage from './InviteStepperPage';
@@ -45,10 +45,10 @@ function InvitePageState() {
4545
const [currentStep, setCurrentStep, councilId] = useStepRouting();
4646

4747
const query = useMemo(() => ({
48-
query: JSON.stringify({ _id: councilId }),
48+
query: JSON.stringify({ inviteLink: councilId }),
4949
}), [councilId]);
5050

51-
const { data, state, error } = useEndpointDataExperimental('councils.getOne', query);
51+
const { data, state, error } = useEndpointDataExperimental('councils.getOneByInviteLink', query);
5252

5353
const goToPreviousStep = useCallback(() => setCurrentStep((currentStep) => (currentStep !== 1 ? currentStep - 1 : currentStep)), []);
5454
const goToNextStep = useCallback(() => setCurrentStep((currentStep) => currentStep + 1), []);
@@ -88,7 +88,7 @@ function InvitePageState() {
8888

8989

9090
return <InvitePageContext.Provider value={value}>
91-
<InviteStepperPage currentStep={currentStep}/>
91+
<InviteStepperPage currentStep={currentStep} council={data}/>
9292
</InvitePageContext.Provider>;
9393
}
9494

app/councils/client/views/invite/InviteStepperPage.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import React from 'react';
55
import { useTranslation } from '../../../../../client/contexts/TranslationContext';
66
import { useWipeInitialPageLoading } from '../../../../../client/hooks/useWipeInitialPageLoading';
77
import ConnectionStatusAlert from '../../../../../client/components/connectionStatus/ConnectionStatusAlert';
8-
import { errorStep, finalStep, useInvitePageContext } from './InvitePageState';
8+
import { errorStep, finalStep } from './InvitePageState';
99
import FinalInviteStep from './steps/FinalInviteStep';
1010
import SideBar from './SideBar';
1111
import NewParticipantStep from './steps/NewParticipantStep';
1212
import ErrorInviteStep from './steps/ErrorInviteStep';
1313
import CouncilInfoStep from './steps/CouncilInfoStep';
1414

1515

16-
function InviteStepperPage({ currentStep = 1 }) {
16+
function InviteStepperPage({ currentStep = 1, council = {} }) {
1717
useWipeInitialPageLoading();
1818
const t = useTranslation();
1919
const small = useMediaQuery('(max-width: 760px)');
@@ -55,7 +55,7 @@ function InviteStepperPage({ currentStep = 1 }) {
5555
<Margins all='x16'>
5656
<Tile is='section' flexGrow={1} flexShrink={1}>
5757
<CouncilInfoStep step={1} title={t('Council_info')} active={currentStep === 1}></CouncilInfoStep>
58-
<NewParticipantStep step={2} title={t('Council_participant_info')} active={currentStep === 2}></NewParticipantStep>
58+
<NewParticipantStep step={2} title={t('Council_participant_info')} active={currentStep === 2} council={council}></NewParticipantStep>
5959
</Tile>
6060
</Margins>
6161
</Scrollable>

app/councils/client/views/invite/steps/NewParticipantStep.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useInvitePageContext } from '../InvitePageState';
1111
import { StepHeader } from '../../../../../../client/views/setupWizard/StepHeader';
1212
import { useRouteParameter } from '../../../../../../client/contexts/RouterContext';
1313

14-
function NewParticipantStep({ step, title, active }) {
14+
function NewParticipantStep({ step, title, active, council }) {
1515
const { goToPreviousStep, goToFinalStep } = useInvitePageContext();
1616
const [newData, setNewData] = useState({
1717
firstName: { value: '', required: true },
@@ -69,7 +69,7 @@ function NewParticipantStep({ step, title, active }) {
6969
goToPreviousStep();
7070
};
7171
const addPersonToCouncil = useMethod('addPersonToCouncil');
72-
const councilId = useRouteParameter('id');
72+
const councilId = council._id;
7373
const handleSubmit = async (event) => {
7474
event.preventDefault();
7575

app/councils/server/methods/insertOrUpdateCouncil.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ Meteor.methods({
1919
}
2020

2121
if (!councilData._id) {
22-
2322
const user = Meteor.user();
2423

24+
const inviteLink = new Date().getTime().toString().substr(0, 9);
25+
2526
const createCouncil = {
2627
ts: new Date(),
2728
u: {
@@ -30,11 +31,12 @@ Meteor.methods({
3031
},
3132
d: new Date(councilData.d),
3233
desc: councilData.desc,
34+
inviteLink,
3335
};
3436

3537
const _id = Councils.create(createCouncil);
3638

37-
return _id;
39+
return { _id, ts: createCouncil.ts };
3840
}
3941

4042
return Councils.updateCouncil(councilData._id, councilData);

app/models/server/raw/Councils.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { BaseRaw } from './BaseRaw';
22

33
export class CouncilsRaw extends BaseRaw {
4-
4+
findCouncilByInviteLink(inviteLink, options) {
5+
return this.findOne(inviteLink, options);
6+
}
57
}

client/routes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ FlowRouter.route('/errands/:type?', {
103103
}],
104104
});
105105

106-
FlowRouter.route('/invite/council/:id/:step?', {
106+
FlowRouter.route('/i/:id/:step?', {
107107
name: 'council-invite',
108108
action: () => {
109109
renderRouteComponent(() => import('../app/councils/client/views/invite/InviteStepperRoute'));

0 commit comments

Comments
 (0)