use strict;
my $str = 'export const AffiliateAccountBIFields = (props) => (
<SimpleShowLayout {...props} variant="one">
<UrlField source="bi_url" options={{ target: \'_blank\' }} />
<ProtectedBIConfigField source="bi_settings" />
</SimpleShowLayout>
);
export const AffiliateAccountGeneralFields = (props) => (
<SimpleShowLayout {...props}>
<TextField source="name" />
<ReferenceField
linkType="show"
label="Platform Provider"
addLabel
source="platform_provider_id"
reference="accounts/platform-providers"
allowEmpty
>
<TextField addLabel source="name" />
</ReferenceField>
<ReferenceField
label="Company"
addLabel
source="company_id"
reference="companies"
linkType="show"
>
<TextField addLabel source="name" />
</ReferenceField>
<AccountManagerField
label="Account Manager"
source="account_manager_id"
addLabel
/>
<PortfolioField label="Portfolio" source="portfolio_id" addLabel />
<FunctionField
label="Status"
addLabel
source="activity_status"
render={(record) => {
if (!record.activity_status) return null;
const humanizedStatus = get(
ACTIVITY_STATUS_OPTIONS,
`${record.activity_status}.name`
);
if (!humanizedStatus) {
// eslint-disable-next-line no-console
console.warn(`Cannot obtain humanized value for activity_status: ${record.activity_status}`);
}
return (
<TextField
source="activity_status"
record={{
...record,
activity_status: humanizedStatus || record.activity_status,
}}
/>
);
}}
/>
<UrlField source="affiliate_system_link" options={{ target: \'_blank\' }} />
<CopyToClipboardField source="username">
<TextField source="username" />
</CopyToClipboardField>
<ProtectedField source="password" />
<CopyToClipboardField source="email">
<TextField source="email" />
</CopyToClipboardField>
<TextField source="security_question" />
<ProtectedField source="security_answer" />
<TextField source="type" />
<BooleanField source="tracking_enabled" />
<TextField source="tracking_variable_name" />
<TextField source="external_affiliate_id" />
<TextField source="revenue_posting_code" />
<BooleanField source="loss_carry_forward" />
<DateField source="updated_at" locales="en-GB" showTime />
<DateField source="created_at" locales="en-GB" showTime />
</SimpleShowLayout>
);
export const AffiliateAccountTabs = (props) => {
if (!props.record) {
return null;
}
return (
<TabbedShowLayout>
<AffiliateAccountGeneralFields {...props} label="General" />
<AffiliateAccountBrands {...props} label="Brands" />
<AffiliateAccountDeals {...props} label="Deals" />
{props.hasBIPermission && (
<AffiliateAccountBIFields {...props} label="BI Settings" />
)}
</TabbedShowLayout>
);
};
AffiliateAccountTabs.propTypes = {
record: PropTypes.object,
hasBIPermission: PropTypes.bool.isRequired,
};
export const Show = (props) => (
<AutoLoginStatusDialog messages={messages}>
<AORShow
{...props}
title={(
<Title
resource="Affiliate Account"
type="show"
buttons={[
<FavoriteButton
record={{ _id: props.match.params.id }}
resource={props.resource}
style={{ height: \'25px\' }}
/>,
]}
/>
)}
actions={(
<ActionsPanel
customButtons={[
<AutoLoginButton
record={{ _id: props.match.params.id }}
resource={props.resource}
resourceConfig={autoLoginConfig}
label="Auto Login"
/>,
]}
/>
)}
>
<AffiliateAccountTabs hasBIPermission={props.hasBIPermission} />
</AORShow>
<NotesView isShow match={props.match} resource={props.resource} />
</AutoLoginStatusDialog>
);
Show.propTypes = {
match: PropTypes.shape({
params: PropTypes.shape({
id: PropTypes.string,
}),
}),
resource: PropTypes.string,
hasBIPermission: PropTypes.bool.isRequired,
};
export default connect((state) => ({
hasBIPermission: checkPermission(state.auth.permissions, \'*\', \'bi_user\'),
}))(Show);
';
my $regex = qr/(export )?const (.* \= \()(.*)(\).*\()(?'fileContent'(\n.*)+)\3\.(?'varName'[^}]*)\}(?'restOfPropLine'.*$)(?'restOfFileContent'(\n.*)+>\n\);)/mp;
my $subst = '$1const $2{ ${varName}, ...$3 }$4${fileContent}${varName}}${restOfPropLine}${restOfFileContent}';
my $result = $str =~ s/$regex/$subst/rg;
print "The result of the substitution is' $result\n";
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html