Skip to content

Commit 7422350

Browse files
author
Fahd
committed
chore(issuer): archive GPM when switch toggled
1 parent 737b6fc commit 7422350

3 files changed

Lines changed: 89 additions & 21 deletions

File tree

packages/polymath-issuer/src/actions/compliance.js

Lines changed: 73 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ export type InvestorCSVRow = [
8686
string,
8787
];
8888

89+
// make more functional and switch transfermanager to module
90+
async function getDelegateDetails(permissionManager, transferManager) {
91+
const delegates = await permissionManager.getAllDelegates(
92+
transferManager.address,
93+
PERM_TYPES.ADMIN
94+
);
95+
let delegateDetails = [];
96+
for (const delegate of delegates) {
97+
let details = await permissionManager.getDelegateDetails(delegate);
98+
delegateDetails.push({ id: delegate, address: delegate, details });
99+
}
100+
return delegateDetails;
101+
}
102+
89103
export const fetchManagers = () => async (
90104
dispatch: Function,
91105
getState: GetState
@@ -95,18 +109,17 @@ export const fetchManagers = () => async (
95109
try {
96110
const st: SecurityToken = getState().token.token.contract;
97111
const permissionManager = await st.getPermissionManager();
98-
if (permissionManager) {
112+
if (!permissionManager) {
113+
return;
114+
}
115+
const moduleMetadata = await st.getModule(permissionManager.address);
116+
if (permissionManager && !moduleMetadata.isArchived) {
99117
const transferManager = await st.getTransferManager();
100118
if (transferManager) {
101-
const delegates = await permissionManager.getAllDelegates(
102-
transferManager.address,
103-
PERM_TYPES.ADMIN
119+
const delegateDetails = await getDelegateDetails(
120+
permissionManager,
121+
transferManager
104122
);
105-
let delegateDetails = [];
106-
for (const delegate of delegates) {
107-
let details = await permissionManager.getDelegateDetails(delegate);
108-
delegateDetails.push({ id: delegate, address: delegate, details });
109-
}
110123
dispatch(loadManagers(delegateDetails));
111124
}
112125
dispatch(toggleWhitelistManagement(true));
@@ -212,24 +225,22 @@ export const removeAddressFromTransferManager = (delegate: Address) => async (
212225
);
213226
};
214227

215-
export const addGeneralPermissionModule = () => async (
228+
export const archiveGeneralPermissionModule = () => async (
216229
dispatch: Function,
217230
getState: GetState
218231
) => {
219232
const st: SecurityToken = getState().token.token.contract;
220-
if (await st.getPermissionManager()) {
221-
dispatch(toggleWhitelistManagement(true));
222-
return;
223-
}
224233
dispatch(
225234
ui.tx(
226-
['Enabling General Permissions Manager for General Transfer Manager'],
235+
['Disabling General Permissions Manager'],
227236
async () => {
228-
await st.setPermissionManager();
237+
const permissionManager = await st.getPermissionManager();
238+
await st.archiveModule(permissionManager.address);
229239
},
230-
'General Permissions Manager for General Transfer Manager Enabled',
240+
'General Permissions Manager Disabled',
231241
() => {
232-
dispatch(toggleWhitelistManagement(true));
242+
dispatch(toggleWhitelistManagement(false));
243+
dispatch(loadManagers([]));
233244
},
234245
undefined,
235246
undefined,
@@ -239,6 +250,50 @@ export const addGeneralPermissionModule = () => async (
239250
);
240251
};
241252

253+
export const addGeneralPermissionModule = () => async (
254+
dispatch: Function,
255+
getState: GetState
256+
) => {
257+
try {
258+
const st: SecurityToken = getState().token.token.contract;
259+
const permissionManager = await st.getPermissionManager();
260+
const transferManager = await st.getTransferManager();
261+
let moduleMetadata = {};
262+
let delegateDetails = [];
263+
264+
if (permissionManager)
265+
moduleMetadata = await st.getModule(permissionManager.address);
266+
267+
dispatch(
268+
ui.tx(
269+
['Enabling General Permissions Manager for General Transfer Manager'],
270+
async () => {
271+
if (moduleMetadata.isArchived) {
272+
await st.unarchiveModule(permissionManager.address);
273+
delegateDetails = await getDelegateDetails(
274+
permissionManager,
275+
transferManager
276+
);
277+
} else {
278+
await st.setPermissionManager();
279+
}
280+
},
281+
'General Permissions Manager for General Transfer Manager Enabled',
282+
() => {
283+
dispatch(loadManagers(delegateDetails));
284+
dispatch(toggleWhitelistManagement(true));
285+
},
286+
undefined,
287+
undefined,
288+
undefined,
289+
true
290+
)
291+
);
292+
} catch (e) {
293+
console.log(e);
294+
}
295+
};
296+
242297
export const fetchWhitelist = () => async (
243298
dispatch: Function,
244299
getState: GetState

packages/polymath-issuer/src/pages/compliance/CompliancePage.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import {
4444
fetchManagers,
4545
toggleWhitelistManagement,
4646
addGeneralPermissionModule,
47+
archiveGeneralPermissionModule,
4748
} from '../../actions/compliance';
4849
import Progress from '../token/components/Progress';
4950
import AddInvestorForm, {
@@ -106,6 +107,7 @@ type DispatchProps = {|
106107
updateOwnershipPercentage: (percentage: number) => any,
107108
toggleFreeze: () => any,
108109
addGeneralPermissionModule: () => any,
110+
archiveGeneralPermissionModule: () => any,
109111
|};
110112

111113
const mapStateToProps = (state: RootState) => ({
@@ -138,6 +140,7 @@ const mapDispatchToProps = {
138140
fetchManagers,
139141
toggleWhitelistManagement,
140142
addGeneralPermissionModule,
143+
archiveGeneralPermissionModule,
141144
};
142145

143146
type Props = StateProps & DispatchProps;
@@ -189,7 +192,6 @@ class CompliancePage extends Component<Props, State> {
189192
this.setState({ percentage: this.props.percentage });
190193
}
191194
this.props.fetchManagers();
192-
// TODO: check redux for whitelist enable
193195
}
194196

195197
componentWillReceiveProps(nextProps) {
@@ -199,7 +201,6 @@ class CompliancePage extends Component<Props, State> {
199201
) {
200202
this.setState({ percentage: nextProps.percentage });
201203
}
202-
// TODO: check redux for whitelist enable
203204
}
204205

205206
handleChangePages = pc => {
@@ -422,7 +423,7 @@ class CompliancePage extends Component<Props, State> {
422423
if (isToggled) {
423424
await this.props.addGeneralPermissionModule();
424425
} else {
425-
this.props.toggleWhitelistManagement(false);
426+
await this.props.archiveGeneralPermissionModule();
426427
}
427428
};
428429

packages/polymath-js/src/contracts/SecurityToken.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,4 +515,16 @@ export default class SecurityToken extends Contract {
515515
0
516516
);
517517
}
518+
519+
async getModule(at: Address): Promise<Web3Receipt> {
520+
return this._methods.getModule(at).call();
521+
}
522+
523+
async arhiveModule(at: Address): Promise<Web3Receipt> {
524+
return this._tx(this._methods.archiveModule(at));
525+
}
526+
527+
async unarchiveModule(at: Address): Promise<Web3Receipt> {
528+
return this._tx(this._methods.unarchiveModule(at));
529+
}
518530
}

0 commit comments

Comments
 (0)