1"use strict";(self.webpackChunkmattermost_webapp=self.webpackChunkmattermost_webapp||[]).push([[3221],{81806(e,t,a){a.d(t,{A:()=>i});var s=a(36418),n=a(14778),o=a(87295);function r(){const{formatMessage:e}=(0,n.useIntl)();return s.createElement("i",{className:"fa fa-angle-left",title:e({id:"generic_icons.back",defaultMessage:"Back Icon"})})}const i=e=>{let{team:t,siteName:a}=e;const i=0===t?.delete_at;return s.createElement("div",{className:"backstage-navbar"},s.createElement(o.A,{className:"backstage-navbar__back",to:`/${i?t?.name:""}`},s.createElement(r,null),s.createElement("span",null,i?s.createElement(n.FormattedMessage,{id:"backstage_navbar.backToMattermost",defaultMessage:"Back to {siteName}",values:{siteName:a??t?.display_name}}):s.createElement(n.FormattedMessage,{id:"backstage_navbar.back",defaultMessage:"Back"}))))}},95571(e,t,a){a.r(t),a.d(t,{default:()=>ya});var s=a(37270),n=a(81911),o=a(26366),r=a(26614),i=a(80635),l=a(14776),c=a(7430),m=a(36418),d=a(67166),u=a(32446),g=a(28676),p=a(14778),h=a(16983),E=a(52157),_=a(29370),f=a(5935),b=(a(15724),a(43617),a(99930),a(93991),a(85873)),M=a(40693),k=a(79751),v=a(865),N=a(87064);const y={openModal:k.q},A=(0,s.connect)(null,y)((function(e){const{confirmButtonText:t=m.createElement(p.FormattedMessage,{id:"integrations.delete.confirm.button",defaultMessage:"Yes, delete it"}),linkText:a=m.createElement(p.FormattedMessage,{id:"installed_integrations.delete",defaultMessage:"Delete"}),modalMessage:s,modalTitle:n=m.createElement(p.FormattedMessage,{id:"integrations.delete.confirm.title",defaultMessage:"Delete Integration"}),onDelete:o,openModal:r}=e,i=(0,m.useCallback)((()=>{r({modalId:"delete_integration_confirm",dialogProps:{confirmButtonText:t,confirmButtonClass:"btn btn-danger",modalClass:"integrations-backstage-modal",message:m.createElement(m.Fragment,null,e.subtitleText&&m.createElement("p",null,e.subtitleText),m.createElement("div",{className:"alert alert-danger"},m.createElement(N.A,{additionalClassName:"mr-1"}),m.createElement("strong",null,e.modalMessage))),onConfirm:o,title:n},dialogType:v.A})}),[t,s,n,o,r]);return m.createElement("button",{className:"color--link style--none",onClick:i},a)}));function C(e){return m.createElement(A,{confirmButtonText:m.createElement(p.FormattedMessage,{id:"emoji_list.delete.confirm.button",defaultMessage:"Delete"}),linkText:m.createElement(p.FormattedMessage,{id:"emoji_list.delete",defaultMessage:"Delete"}),modalMessage:m.createElement(p.FormattedMessage,{id:"emoji_list.delete.confirm.msg",defaultMessage:"This action permanently deletes the custom emoji. Are you sure you want to delete it?"}),modalTitle:m.createElement(p.FormattedMessage,{id:"emoji_list.delete.confirm.title",defaultMessage:"Delete Custom Emoji"}),onDelete:e.onDelete})}const w=[h.A.DELETE_EMOJIS],S=[h.A.DELETE_OTHERS_EMOJIS],F=e=>{let{actions:{deleteCustomEmoji:t},onDelete:a,emoji:s={},creatorUsername:n,currentUserId:o="",creatorDisplayName:r=""}=e;const i=(0,m.useMemo)((()=>({backgroundImage:`url(${M.mT.getCustomEmojiImageUrl(s.id)})`})),[s.id]),l=(0,m.useCallback)((()=>{s&&(a&&a(s.id),t(s.id))}),[t,s,a]);let c=r;n&&n!==c&&(c+=" (@"+n+")");let d=m.createElement(C,{onDelete:l});return d=s.creator_id===o?m.createElement(E.A,{permissions:w},d):m.createElement(E.A,{permissions:w},m.createElement(E.A,{permissions:S},d)),m.createElement("tr",{className:"backstage-list__item"},m.createElement("td",{className:"emoji-list__name"},":"+s.name+":"),m.createElement("td",{className:"emoji-list__image"},m.createElement("span",{className:"emoticon",style:i})),m.createElement("td",{className:"emoji-list__creator"},c),m.createElement("td",{className:"emoji-list-item_actions"},d))},O=m.memo(F),T=(0,s.connect)((function(e,t){const a=e.entities.emojis.customEmoji[t.emojiId],s=(0,c.wz)(e,a.creator_id);return{emoji:a,creatorDisplayName:(0,b.GZ)(e,s),creatorUsername:s?s.username:"",currentUserId:(0,c.WR)(e),currentTeam:(0,l.H7)(e)}}),(function(e){return{actions:(0,u.zH)({deleteCustomEmoji:_.xU},e)}}))(O);var x=a(1396),I=a(30491),U=a(14309),P=a(5955),L=a(57891),D=a(12082);class H extends m.PureComponent{constructor(e){super(e),this.searchTimeout=null,this.state={loading:!0,page:0,nextLoading:!1,searchEmojis:null,missingPages:!0}}async componentDidMount(){this.props.actions.getCustomEmojis(0,51,o.zT.SORT_BY_NAME,!0).then((e=>{let{data:t}=e;this.setState({loading:!1}),t&&t.length<50&&this.setState({missingPages:!1})}))}nextPage=e=>{e&&e.preventDefault();const t=this.state.page+1;
1this.setState({nextLoading:!0}),this.props.actions.getCustomEmojis(t,50,o.zT.SORT_BY_NAME,!0).then((e=>{let{data:a}=e;this.setState({page:t,nextLoading:!1}),a&&a.length<50&&this.setState({missingPages:!1}),this.props.scrollToTop()}))};previousPage=e=>{e&&e.preventDefault(),this.setState({page:this.state.page-1,nextLoading:!1,missingPages:!0}),this.props.scrollToTop()};onSearchChange=e=>{if(!e||!e.target)return;const t=e.target.value||"";clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout((async()=>{if(""===t.trim())return void this.setState({searchEmojis:null,page:0});this.setState({loading:!0});const{data:e}=await this.props.actions.searchCustomEmojis(t,{},!0);e?this.setState({searchEmojis:e.map((e=>e.id)),loading:!1}):this.setState({searchEmojis:[],loading:!1})}),200)};deleteFromSearch=e=>{if(!this.state.searchEmojis)return;const t=this.state.searchEmojis.indexOf(e);if(t<0)return;const a=[...this.state.searchEmojis];a.splice(t,1),this.setState({searchEmojis:a})};render(){const e=this.state.searchEmojis,t=[];let a,s;if(this.state.loading)t.push(m.createElement("tr",{key:"loading",className:"backstage-list__item backstage-list__empty"},m.createElement("td",{colSpan:4},m.createElement(x.A,{key:"loading"}))));else if(0===this.props.emojiIds.length||e&&0===e.length)t.push(m.createElement("tr",{key:"empty",className:"backstage-list__item backstage-list__empty"},m.createElement("td",{colSpan:4},m.createElement(p.FormattedMessage,{id:"emoji_list.empty",defaultMessage:"No custom emoji found"}))));else if(e)e.forEach((e=>{t.push(m.createElement(T,{key:"emoji_search_item"+e,emojiId:e,onDelete:this.deleteFromSearch,actions:{deleteCustomEmoji:_.xU}}))}));else{const e=50*this.state.page,n=e+50;if(this.props.emojiIds.slice(e,n).forEach((e=>{t.push(m.createElement(T,{key:"emoji_list_item"+e,emojiId:e,actions:{deleteCustomEmoji:_.xU}}))})),this.state.missingPages){const e=m.createElement("span",null,m.createElement(p.FormattedMessage,{id:"filtered_user_list.next",defaultMessage:"Next"}),m.createElement(P.A,{additionalClassName:"ml-2"}));a=m.createElement(U.A,{btnClass:"btn-tertiary",extraClasses:"pull-right",onClick:this.nextPage,saving:this.state.nextLoading,disabled:this.state.nextLoading,defaultMessage:e,savingMessage:e})}this.state.page>0&&(s=m.createElement("button",{className:"btn btn-tertiary",onClick:this.previousPage},m.createElement(L.A,{additionalClassName:"mr-2"}),m.createElement(p.FormattedMessage,{id:"filtered_user_list.prev",defaultMessage:"Previous"})))}return m.createElement("div",null,m.createElement("div",{className:"backstage-filters"},m.createElement("div",{className:"backstage-filter__search"},m.createElement(D.A,null),m.createElement(I.A,{type:"search",className:"form-control",placeholder:(0,p.defineMessage)({id:"emoji_list.search",defaultMessage:"Search Custom Emoji"}),onChange:this.onSearchChange,style:R.search}))),m.createElement("span",{className:"backstage-list__help"},m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"emoji_list.help",defaultMessage:"Custom emoji are available to everyone on your server. Type ':' followed by two characters in a message box to bring up the emoji selection menu."})),m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"emoji_list.help2",defaultMessage:"Tip: If you add #, ##, or ### as the first character on a new line containing emoji, you can use larger sized emoji. To try it out, send a message such as: '# :smile:'."}))),m.createElement("div",{className:"backstage-list"},m.createElement("table",{className:"emoji-list__table"},m.createElement("thead",null,m.createElement("tr",{className:"backstage-list__item emoji-list__table-header"},m.createElement("th",{className:"emoji-list__name"},m.createElement(p.FormattedMessage,{id:"emoji_list.name",defaultMessage:"Name"})),m.createElement("th",{className:"emoji-list__image"},m.createElement(p.FormattedMessage,{id:"emoji_list.image",defaultMessage:"Image"})),m.createElement("th",{className:"emoji-list__creator"},m.createElement(p.FormattedMessage,{id:"emoji_list.creator",defaultMessage:"Creator"})),m.createElement("th",{className:"emoji-list_actions"},m.createElement(p.FormattedMessage,{id:"emoji_list.actions",defaultMessage:"Actions"}
1)))),m.createElement("tbody",null,t))),m.createElement("div",{className:"filter-controls pt-3"},s,a))}}const R={search:{flexGrow:0,flexShrink:0}},j=(0,s.connect)((function(e){return{emojiIds:(0,f.Pi)(e)||[]}}),(function(e){return{actions:(0,u.zH)({getCustomEmojis:_.J5,searchCustomEmojis:_.fJ},e)}}))(H),B=[h.A.CREATE_EMOJIS],W=["system_admin","team_admin","system_user","team_user"],G=(0,s.connect)((function(e){const t=(0,l.H7)(e);return{teamName:t?.name,teamDisplayName:t?.display_name,siteName:e.entities.general.config.SiteName}}),(function(e){return{actions:(0,u.zH)({loadRolesIfNeeded:g.cF},e)}}))((function(e){let{teamDisplayName:t="",teamName:a="",siteName:s="",scrollToTop:o,actions:r}=e;const i=(0,p.useIntl)();(0,m.useEffect)((()=>{l(),r.loadRolesIfNeeded(W)}),[]),(0,m.useEffect)((()=>{l()}),[s]);const l=()=>{document.title=i.formatMessage({id:"custom_emoji.header",defaultMessage:"Custom Emoji"})+" - "+t+" "+s};return m.createElement("div",{className:"backstage-content emoji-list"},m.createElement("div",{className:"backstage-header"},m.createElement("h1",null,m.createElement(p.FormattedMessage,{id:"emoji_list.header",defaultMessage:"Custom Emoji"})),m.createElement(E.A,{permissions:B},m.createElement(n.Link,{className:"add-link",to:"/"+a+"/emoji/add"},m.createElement("button",{type:"button",className:"btn btn-primary"},m.createElement(p.FormattedMessage,{id:"emoji_list.add",defaultMessage:"Add Custom Emoji"}))))),m.createElement(j,{scrollToTop:o}))}));var z=a(69410);const $=e=>{let{children:t}=e;const{formatMessage:a}=(0,p.useIntl)(),s=[];return m.Children.forEach(t,((e,t)=>{0!==t&&s.push(m.createElement("span",{key:"divider"+t,className:"backstage-header__divider"},m.createElement("i",{className:"fa fa-angle-right",title:a({id:"generic_icons.breadcrumb",defaultMessage:"Breadcrumb Icon"})}))),s.push(e)})),m.createElement("div",{className:"backstage-header"},m.createElement("h1",null,s))};var Y=a(85990),q=a(57565),V=a(83007),K=a(81444);class J extends m.PureComponent{constructor(e){super(e),this.state={name:"",image:null,imageUrl:"",saving:!1,error:null}}handleFormSubmit=async e=>this.handleSubmit(e);handleSaveButtonClick=async e=>this.handleSubmit(e);handleSubmit=async e=>{const{actions:t,emojiMap:a,user:s,team:n}=this.props,{image:o,name:r,saving:i}=this.state;if(e.preventDefault(),i)return;this.setState({saving:!0,error:null});const l={creator_id:s.id,name:r.trim().toLowerCase()};if(l.name.startsWith(":")&&l.name.endsWith(":")&&(l.name=l.name.substring(1,l.name.length-1)),!l.name)return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.nameRequired",defaultMessage:"A name is required for the emoji"})});if(/[^a-z0-9+_-]/.test(l.name))return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.nameInvalid",defaultMessage:"An emoji's name can only contain lowercase letters, numbers, and the symbols '-', '+' and '_'."})});if(a.hasSystemEmoji(l.name))return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.nameTaken",defaultMessage:"This name is already in use by a system emoji. Please choose another name."})});if(a.has(l.name))return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.customNameTaken",defaultMessage:"This name is already in use by a custom emoji. Please choose another name."})});if(!o)return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.imageRequired",defaultMessage:"An image is required for the emoji"})});if(o.size>1048576)return void this.setState({saving:!1,error:m.createElement(p.FormattedMessage,{id:"add_emoji.imageTooLarge",defaultMessage:"Unable to create emoji. Image must be less than 512 KiB in size."})});const c=await t.createCustomEmoji(l,o);if("data"in c&&c&&c.data.name===l.name)return void(0,V.J)().push("/"+n.name+"/emoji");if("error"in c){const e=c;if(e)return void this.setState({saving:!1,error:e.error.message})}const d=m.createElement(p.FormattedMessage,{id:"add_emoji.failedToAdd",defaultMessage:"Something went wrong when adding the custom emoji."});this.setState({saving:!1,error:d})};updateName=e=>{this.setState({name:e.target.value})};updateImage=e=>{if(null==e.target.files||0===e.target.files.length)return void this.setState({image:null,imageUrl:""});const t=e.target.files[0],a=new FileReader;a.onload=()=>{this.setState({image:t,imageUrl:a.result})},a.readAsDataURL(t)};render(){let e=null;this.state.image&&(e=m.createElement("span",{className:"add-emoji__filename"},this.state.image.name));let t=null;return this.state.imageUrl&&(t=m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"preview"},m.createElement(p.FormattedMessage,{id:"add_emoji.preview",defaultMessage:"Preview"})),m.createElement("div",{className:"col-md-5 col-sm-8 add-emoji__preview"},m.createElement(p.FormattedMessage,{id:"add_emoji.preview.sentence",defaultMessage:"This is a sentence with {image} in it.",values:{image:m.createElement("span",{className:"emoticon",style:{backgroundImage:"url("+this.state.imageUrl+")"}})}})))),m.createElement("div",{className:"backstage-content row"},m.createElement($,null,m.createElement(n.Link,{to:"/"+this.props.team.name+"/emoji"},m.createElement(p.FormattedMessage,{id:"emoji_list.header",defaultMessage:"Custom Emoji"})),m.createElement(p.FormattedMessage,{id:"add_emoji.header",defaultMessage:"Add"})),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal",onSubmit:this.handleFormSubmit},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"name"},m.createElement(p.FormattedMessage,{id:"add_emoji.name",defaultMessage:"Name"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"name",type:"text",maxLength:64,className:"form-control",value:this.state.name,onChange:this.updateName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_emoji.name.help",defaultMessage:"Specify an emoji name that's up to 64 characters. It can contain lowercase letters, numbers, and the symbols '-', '+' and '_'."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"image"},m.createElement(p.FormattedMessage,{id:"add_emoji.image",defaultMessage:"Image"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("div",null,m.createElement("div",{className:"add-emoji__upload"},m.createElement("button",{className:"btn btn-primary"},m.createElement(p.FormattedMessage,{id:"add_emoji.image.button",defaultMessage:"Select"})),m.createElement("input",{id:"select-emoji",type:"file",accept:K.YM.ACCEPT_EMOJI_IMAGE,multiple:!1,onChange:this.updateImage})),e,m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_emoji.image.help",defaultMessage:"Specify a .gif, .png, or .jpg file for your emoji. The file can be up to 512 KiB. The dimensions are resized automatically to 128 pixels by 128 pixels while maintaining the aspect ratio."}))))),t,m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",error:this.state.error}),m.createElement(n.Link,{className:"btn btn-tertiary",to:"/"+this.props.team.name+"/emoji"},m.createElement(p.FormattedMessage,{id:"add_emoji.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{"data-testid":"save-button",className:"btn btn-primary",type:"submit",spinning:this.state.saving,spinningText:(0,p.defineMessage)({id:"add_emoji.saving",defaultMessage:"Saving..."}),onClick:this.handleSaveButtonClick},m.createElement(p.FormattedMessage,{id:"add_emoji.save",defaultMessage:"Save"}))))))}}const X=(0,s.connect)((function(e){return{emojiMap:(0,z.v6)(e)}}),(function(e){return{actions:(0,u.zH)({createCustomEmoji:_.uI},e)}}))(J);var Q=a(17518),Z=a(72208),ee=a(26808),te=a(78923);const ae=a.p+"files/759f9e9f3e38a0345fb4.jpg",se=a.p+"files/ddf1e1f66e231ccde172.png",ne=a.p+"files/8f2c89a28f6cc7b3a85c.png",oe=a.p+"files/0dfb591a585cd5755ab5.jpg",re=a.p+"files/681da897af02dcadf276.jpg",ie=e=>{let{image:t,title:a,description:s,link:o}=e;return m.createElement(n.Link,{to:o,className:"integration-option"},m.createElement("img",{alt:"integration image",className:"integration-option__image",src:t}),m.createElement("div",{className:"integration-option__title"},a),m.createElement("div",{className:"integration-option__description"},s))},le=m.memo(ie);class ce extends m.PureComponent{componentDidMount(){this.updateTitle()}updateTitle=()=>{const e=this.props.siteName||"";document.title=b.Vw({id:"admin.sidebar.integrations",defaultMessage:"Integrations"})+" - "+this.props.team.display_name+" "+e};render(){const e=[];return this.props.enableIncomingWebhooks&&e.push(m.createElement(ee.A,{teamId:this.props.team.id,permissions:[o.xB.MANAGE_INCOMING_WEBHOOKS,o.xB.MANAGE_OWN_INCOMING_WEBHOOKS],key:"incomingWebhookPermission"},m.createElement(le,{key:"incomingWebhook",image:ae,title:m.createElement(p.FormattedMessage,{id:"integrations.incomingWebhook.title",defaultMessage:"Incoming Webhooks"}),description:m.createElement(p.FormattedMessage,{id:"integrations.incomingWebhook.description",defaultMessage:"Incoming webhooks allow external integrations to send messages"}),link:"/"+this.props.team.name+"/integrations/incoming_webhooks"}))),this.props.enableOutgoingWebhooks&&e.push(m.createElement(ee.A,{teamId:this.props.team.id,permissions:[o.xB.MANAGE_OUTGOING_WEBHOOKS,o.xB.MANAGE_OWN_OUTGOING_WEBHOOKS],key:"outgoingWebhookPermission"},m.createElement(le,{key:"outgoingWebhook",image:oe,title:m.createElement(p.FormattedMessage,{id:"integrations.outgoingWebhook.title",defaultMessage:"Outgoing Webhooks"}),description:m.createElement(p.FormattedMessage,{id:"integrations.outgoingWebhook.description",defaultMessage:"Outgoing webhooks allow external integrations to receive and respond to messages"}),link:"/"+this.props.team.name+"/integrations/outgoing_webhooks"}))),this.props.enableCommands&&e.push(m.createElement(ee.A,{teamId:this.props.team.id,permissions:[o.xB.MANAGE_SLASH_COMMANDS,o.xB.MANAGE_OWN_SLASH_COMMANDS],key:"c
1ommandPermission"},m.createElement(le,{key:"command",image:re,title:m.createElement(p.FormattedMessage,{id:"integrations.command.title",defaultMessage:"Slash Commands"}),description:m.createElement(p.FormattedMessage,{id:"integrations.command.description",defaultMessage:"Slash commands send events to external integrations"}),link:"/"+this.props.team.name+"/integrations/commands"}))),this.props.enableOAuthServiceProvider&&e.push(m.createElement(Z.A,{permissions:[o.xB.MANAGE_OAUTH],key:"oauth2AppsPermission"},m.createElement(le,{key:"oauth2Apps",image:se,title:m.createElement(p.FormattedMessage,{id:"integrations.oauthApps.title",defaultMessage:"OAuth 2.0 Applications"}),description:m.createElement(p.FormattedMessage,{id:"integrations.oauthApps.description",defaultMessage:"OAuth 2.0 allows external applications to make authorized requests to the Mattermost API"}),link:"/"+this.props.team.name+"/integrations/oauth2-apps"}))),this.props.enableOutgoingOAuthConnections&&e.push(m.createElement(ee.A,{teamId:this.props.team.id,permissions:[o.xB.MANAGE_OUTGOING_OAUTH_CONNECTIONS],key:"outgoingOAuthConnectionsPermission"},m.createElement(le,{key:"outgoingOAuthConnections",image:ne,title:m.createElement(p.FormattedMessage,{id:"integrations.outgoingOAuthConnections.title",defaultMessage:"Outgoing OAuth Connections"}),description:m.createElement(p.FormattedMessage,{id:"integrations.outgoingOAuthConnections.description",defaultMessage:"Outgoing OAuth Connections allow custom integrations to communicate to external systems"}),link:"/"+this.props.team.name+"/integrations/outgoing-oauth2-connections"}))),e.push(m.createElement(Z.A,{permissions:["manage_bots"],key:"botsPermissions"},m.createElement(le,{image:te,title:m.createElement(p.FormattedMessage,{id:"bots.manage.header",defaultMessage:"Bot Accounts"}),description:m.createElement(p.FormattedMessage,{id:"bots.manage.description",defaultMessage:"Use bot accounts to integrate with Mattermost through plugins or the API"}),link:"/"+this.props.team.name+"/integrations/bots"}))),m.createElement("div",{className:"backstage-content row"},m.createElement("div",{className:"backstage-header"},m.createElement("h1",null,m.createElement(p.FormattedMessage,{id:"integrations.header",defaultMessage:"Integrations"}))),m.createElement("div",{className:"backstage-list__help"},m.createElement(p.FormattedMessage,{id:"integrations.help",defaultMessage:"Visit the {appDirectory} to find self-hosted, third-party apps and integrations for Mattermost.",values:{appDirectory:m.createElement(Q.A,{href:"https://mattermost.com/marketplace",location:"integrations"},m.createElement(p.FormattedMessage,{id:"integrations.help.appDirectory",defaultMessage:"App Directory"}))}})),m.createElement("div",{className:"integrations-list d-flex flex-wrap"},e))}}const me=(0,s.connect)((function(e){const t=(0,r.zj)(e);return{siteName:t.SiteName,enableIncomingWebhooks:"true"===t.EnableIncomingWebhooks,enableOutgoingWebhooks:"true"===t.EnableOutgoingWebhooks,enableCommands:"true"===t.EnableCommands,enableOAuthServiceProvider:"true"===t.EnableOAuthServiceProvider,enableOutgoingOAuthConnections:"true"===t.EnableOutgoingOAuthConnections}}))(ce);var de=a(12966),ue=(a(81975),a(8361)),ge=a(65952),pe=a(84836),he=a(16230);const Ee=e=>{let{channels:t,selectOpen:a,selectPrivate:s,selectDm:n,value:o,onChange:r}=e;const i=(0,p.useIntl)(),l=[m.createElement("option",{key:"",value:""},i.formatMessage({id:"channel_select.placeholder",defaultMessage:"--- Select a channel ---"}))];return t.forEach((e=>{const t=e.display_name||e.name;(e.type===K.Ay.OPEN_CHANNEL&&a||e.type===K.Ay.PRIVATE_CHANNEL&&s||e.type===K.Ay.DM_CHANNEL&&n)&&l.push(m.createElement("option",{key:e.id,value:e.id},t))})),m.createElement("select",{className:"form-control",value:o,onChange:r,id:"channelSelect"},l)},_e=(0,m.memo)(Ee),fe=(0,ue.Mz)("getMyChannelsSorted",ge.$3,pe.v,((e,t)=>[...e.filter((e=>0===e.delete_at))].sort(he.U8.bind(null,t)))),be=(0,s.connect)((function(e){return{channels:fe(e)}}))(_e);class Me extends m.PureComponent{constructor(e){super(e),this.state=this.getStateFromHook(this.props.initialHook)}getStateFromHook=e=>({displayName:e?.display_name||"",description:e?.description||"",channelId:e?.channel_id||"",channelLocked:e?.channel_locked||!1,username:e?.username||"",iconURL:e?.icon_url||"",saving:!1,serverError:"",clientError:null});handleSubmit=e=>{if(e.preventDefault(),this.state.saving)return;if(this.setState({saving:!0,serverError:"",clientError:null}),!this.state.channelId)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.channelRequired",defaultMessage:"A valid channel is required"})});const t={channel_id:this.state.channelId,channel_locked:this.state.channelLocked,display_name:this.state.displayName,description:this.state.description,username:this.state.username,icon_url:this.state.iconURL,id:this.props.initialHook?.id||"",create_at:this.props.initialHook?.create_at||0,update_at:this.props.initialHook?.update_at||0,delete_at:this.props.initialHook?.delete_at||0,team_id:this.props.initialHook?.team_id||"",user_id:this.props.initialHook?.user_id||""};this.props.action(t).then((()=>this.setState({saving:!1})))};updateDisplayName=e=>{this.setState({displayName:e.target.value})};updateDescription=e=>
1{this.setState({description:e.target.value})};updateChannelId=e=>{this.setState({channelId:e.target.value})};updateChannelLocked=e=>{this.setState({channelLocked:e.target.checked})};updateUsername=e=>{this.setState({username:e.target.value})};updateIconURL=e=>{this.setState({iconURL:e.target.value})};render(){const e=this.props.header,t=this.props.footer;return m.createElement("div",{className:"backstage-content"},m.createElement($,null,m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/incoming_webhooks`},m.createElement(p.FormattedMessage,{id:"incoming_webhooks.header",defaultMessage:"Incoming Webhooks"})),m.createElement(p.FormattedMessage,{id:e.id,defaultMessage:e.defaultMessage})),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal",onSubmit:e=>this.handleSubmit(e)},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"displayName"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.displayName",defaultMessage:"Title"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"displayName",type:"text",maxLength:64,className:"form-control",value:this.state.displayName,onChange:this.updateDisplayName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.displayName.help",defaultMessage:"Specify a title, of up to 64 characters, for the webhook settings page."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"description"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.description",defaultMessage:"Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"description",type:"text",maxLength:500,className:"form-control",value:this.state.description,onChange:this.updateDescription}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.description.help",defaultMessage:"Describe your incoming webhook."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"channelId"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.channel",defaultMessage:"Channel"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(be,{value:this.state.channelId,onChange:this.updateChannelId,selectOpen:!0,selectPrivate:!0,selectDm:!1}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.channel.help",defaultMessage:"This is the default public or private channel that receives the webhook payloads. When setting up the webhook, you must belong to the private channel."})))),this.props.canBypassChannelLock&&m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"channelLocked"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.channelLocked",defaultMessage:"Lock to this channel"})),m.createElement("div",{className:"col-md-5 col-sm-8 checkbox"},m.createElement("input",{id:"channelLocked",type:"checkbox",checked:this.state.channelLocked,onChange:this.updateChannelLocked}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.channelLocked.help",defaultMessage:"If set, the incoming webhook can post only to the selected channel."})))),this.props.enablePostUsernameOverride&&m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"username"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.username",defaultMessage:"Username"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"username",type:"text",maxLength:22,className:"form-control",value:this.state.username,onChange:this.updateUsername}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.username.help",defaultMessage:'Specify the username this integration will post as. Usernames can be up to 22 characters, and can contain lowercase letters, numbers and the symbols "-", "_", and ".". If left blank, the name specified by the webhook creator is used.'})))),this.props.enablePostIconOverride&&m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"iconURL"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.icon_url",defaultMessage:"Profile Picture"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"iconURL",type:"text",maxLength:1024,className:"form-control",value:this.state.iconURL,onChange:this.updateIconURL}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.icon_url.help",defaultMessage:"Enter the URL of a .png or .jpg file for the profile picture of this integration when posting. The file should be at least 128 pixels by 128 pixels. If left blank, the profile picture specified by the webhook creator is used."})))),m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[this.props.serverError,this.state.clientError]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:`/${this.props.team.name}/integrations/incoming_webhooks`},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:this.state.saving,spinningText:this.props.loading,onClick:e=>this.handleSubmit(e),id:"saveWebhook"},m.createElement(p.FormattedMessage,{id:t.id,defaultMessage:t.defaultMessage}))))))}}const ke=(0,p.defineMessages)({footer:{id:"add_incoming_webhook.save",defaultMessage:"Save"},header:{id:"integrations.add",defaultMessage:"Add"},loading:{id:"add_incoming_webhook.saving",defaultMessage:"Saving..."}}),ve=e=>{let{team:t,enablePostUsernameOverride:a,enablePostIconOverride:s,canBypassChannelLock:n,actions:o}=e;const[r,i]=(0,m.useState)(""),l=(0,m.useCallback)((async e=>{i("");const{data:a,error:s}=await o.createIncomingHook(e);a?(0,V.J)().push(`/${t.name}/integrations/confirm?type=incoming_webhooks&id=${a.id}`):s&&i(s.message)}),[o,t.name]);return m.createElement(Me,{team:t,header:ke.header,footer:ke.footer,loading:ke.loading,enablePostUsernameOverride:a,enablePostIconOverride:s,canBypassChannelLock:n,action:l,serverError:r})},Ne=(0,m.memo)(ve),ye=(0,s.connect)((function(e){const t=(0,r.zj)(e);return{enablePostUsernameOverride:"true"===t.EnablePostUsernameOverride,enablePostIconOverride:"true"===t.EnablePostIconOverride,canBypassChannelLock:(0,i.pU)(e,o.xB.BYPASS_INCOMING_WEBHOOK_CHANNEL_LOCK)}}),(function(e){return{actions:(0,u.zH)({createIncomingHook:de.Ii},e)}}))(Ne);class Ae extends m.PureComponent{constructor(e){super(e),this.image=new Image,this.image.onload=this.imageLoaded,this.icon_url=m.createRef(),this.state=this.getStateFromApp(this.props.initialApp||{})}getStateFromApp=e=>{const t=e.id&&(!e.client_secret||""===e.client_secret);return{name:e.name||"",description:e.description||"",homepage:e.homepage||"",icon_url:e.icon_url||"",callbackUrls:e.callback_urls?e.callback_urls.join("\n"):"",is_trusted:e.is_trusted||!1,is_public:e.is_public??(t||!1),has_icon:Boolean(e.icon_url),saving:!1,clientError:null}};imageLoaded=()=>{this.icon_url.current?.value&&this.setState({has_icon:!0,icon_url:this.icon_url.current.value})};handleSubmit=e=>{if(e.preventDefault(),this.state.saving)return;if(this.setState({saving:!0,clientError:""}),!this.state.name)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_oauth_a
1pp.nameRequired",defaultMessage:"Name for the OAuth 2.0 application is required."})});const t=this.props.initialApp?.is_dynamically_registered||!1;if(!this.state.description&&!t)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_oauth_app.descriptionRequired",defaultMessage:"Description for the OAuth 2.0 application is required."})});if(!this.state.homepage&&!t)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_oauth_app.homepageRequired",defaultMessage:"Homepage for the OAuth 2.0 application is required."})});const a=[];for(let e of this.state.callbackUrls.split("\n"))e=e.trim(),e.length>0&&a.push(e);if(0===a.length)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_oauth_app.callbackUrlsRequired",defaultMessage:"One or more callback URLs are required."})});const s={name:this.state.name,callback_urls:a,homepage:this.state.homepage,description:this.state.description,is_trusted:this.state.is_trusted,is_public:this.state.is_public,icon_url:this.state.icon_url};this.props.action(s).then((()=>this.setState({saving:!1})))};updateName=e=>{this.setState({name:e.target.value})};updateTrusted=e=>{this.setState({is_trusted:"true"===e.target.value})};updatePublic=e=>{this.setState({is_public:"true"===e.target.value})};updateDescription=e=>{this.setState({description:e.target.value})};updateHomepage=e=>{this.setState({homepage:e.target.value})};updateIconUrl=e=>{this.setState({has_icon:!1,icon_url:e.target.value}),this.image.src=e.target.value};updateCallbackUrls=e=>{this.setState({callbackUrls:e.target.value})};render(){const e=this.props.header,t=this.props.footer,a=this.props.renderExtra;let s;this.state.has_icon&&(s=m.createElement("div",{className:"integration__icon"},m.createElement("img",{alt:"integration icon",src:this.state.icon_url})));const r=m.createElement(Z.A,{permissions:[o.xB.MANAGE_SYSTEM]},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"is_trusted"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.trusted",defaultMessage:"Is Trusted"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("label",{className:"radio-inline"},m.createElement("input",{type:"radio",value:"true",name:"is_trusted",checked:this.state.is_trusted,onChange:this.updateTrusted}),m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.trusted.yes",defaultMessage:"Yes"})),m.createElement("label",{className:"radio-inline"},m.createElement("input",{type:"radio",value:"false",name:"is_trusted",checked:!this.state.is_trusted,onChange:this.updateTrusted}),m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.trusted.no",defaultMessage:"No"})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.trusted.help",defaultMessage:"If true, the OAuth 2.0 application is considered trusted by the Mattermost server and does not require the user to accept authorization. If false, a window opens to ask the user to accept or deny the authorization."}))))),i=Boolean(this.props.initialApp?.id),l=m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"is_public"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.public",defaultMessage:"Is Public Client"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("label",{className:"radio-inline"},m.createElement("input",{type:"radio",value:"true",name:"is_public",checked:this.state.is_public,onChange:this.updatePublic,disabled:i}),m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.public.yes",defaultMessage:"Yes"})),m.createElement("label",{className:"radio-inline"},m.createElement("input",{type:"radio",value:"false",name:"is_public",checked:!this.state.is_public,onChange:this.updatePublic,disabled:i}),m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.public.no",defaultMessage:"No"})),m.createElement("div",{className:"form__help"}
1,m.createElement(p.FormattedMessage,{id:"add_oauth_app.public.help",defaultMessage:"If true, the OAuth 2.0 application is a public client (no client secret). Public clients must use PKCE for authorization. If false, the application is a confidential client with a client secret. This setting cannot be changed after the application is created."}))));return m.createElement("div",{className:"backstage-content"},m.createElement($,null,m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/oauth2-apps`},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.header",defaultMessage:"OAuth 2.0 Applications"})),m.createElement(p.FormattedMessage,{id:e.id,defaultMessage:e.defaultMessage})),m.createElement("div",{className:"backstage-form"},s,m.createElement("form",{className:"form-horizontal"},r,l,m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"name"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.name",defaultMessage:"Display Name"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"name",type:"text",maxLength:64,className:"form-control",value:this.state.name,onChange:this.updateName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.name.help",defaultMessage:"Specify the display name, of up to 64 characters, for your OAuth 2.0 application."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"description"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.description",defaultMessage:"Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"description",type:"text",maxLength:512,className:"form-control",value:this.state.description,onChange:this.updateDescription}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.description.help",defaultMessage:"Describe your OAuth 2.0 application."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"homepage"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.homepage",defaultMessage:"Homepage"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"homepage",type:"url",maxLength:256,className:"form-control",value:this.state.homepage,onChange:this.updateHomepage}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.homepage.help",defaultMessage:"This is the URL for the homepage of the OAuth 2.0 application. Depending on your server configuration, use HTTP or HTTPS in the URL."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"icon_url"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.iconUrl",defaultMessage:"Icon URL"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"icon_url",ref:this.icon_url,type:"url",maxLength:512,className:"form-control",value:this.state.icon_url,onChange:this.updateIconUrl}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.icon.help",defaultMessage:"(Optional) The URL of the image used for your OAuth 2.0 application. Make sure you use HTTP or HTTPS in your URL."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"callbackUrls"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.callbackUrls",defaultMessage:"Callback URLs (One Per Line)"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("textarea",{id:"callbackUrls",rows:3,maxLength:1024,className:"form-control",value:this.state.callbackUrls,onChange:this.updateCallbackUrls}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.callbackUrls.help",defaultMessage:"The redirect URIs to which the service will redirect users after accepting or denying authorization of your application, and which will handle authorization codes or access tokens. Must be a valid URL and start with http:// or https://."})))),m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[this.props.serverError,this.state.clientError]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:`/${this.props.team.name}/integrations/oauth2-apps`}
1,m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:this.state.saving,spinningText:this.props.loading,onClick:this.handleSubmit,id:"saveOauthApp"},m.createElement(p.FormattedMessage,{id:t.id,defaultMessage:t.defaultMessage})),a))))}}const Ce=(0,p.defineMessages)({footer:{id:"installed_oauth_apps.save",defaultMessage:"Save"},header:{id:"add_oauth_app.header",defaultMessage:"Add"},loading:{id:"installed_oauth_apps.saving",defaultMessage:"Saving..."}}),we=(0,s.connect)(null,(function(e){return{actions:(0,u.zH)({addOAuthApp:de.s8},e)}}))((e=>{let{team:t,actions:a}=e;const s=(0,n.useHistory)(),[o,r]=(0,m.useState)("");return m.createElement(Ae,{team:t,header:Ce.header,footer:Ce.footer,loading:Ce.loading,action:async e=>{r("");const{data:n,error:o}=await a.addOAuthApp(e);n?s.push(`/${t.name}/integrations/confirm?type=oauth2-apps&id=${n.id}`):o&&r(o.message)},serverError:o})}));class Se extends m.PureComponent{constructor(e){super(e),this.state=this.getStateFromHook(this.props.initialHook)}getStateFromHook=e=>{let t="";if(e?.trigger_words){let a=0;for(a=0;a<e.trigger_words.length;a++)t+=e.trigger_words[a]+"\n"}let a="";if(e?.callback_urls){let t=0;for(t=0;t<e.callback_urls.length;t++)a+=e.callback_urls[t]+"\n"}return{displayName:e?.display_name||"",description:e?.description||"",contentType:e?.content_type||"application/x-www-form-urlencoded",channelId:e?.channel_id||"",triggerWords:t,triggerWhen:e?.trigger_when||0,callbackUrls:a,saving:!1,clientError:null,username:e?.username||"",iconURL:e?.icon_url||""}};handleSubmit=e=>{if(e.preventDefault(),this.state.saving)return;this.setState({saving:!0,clientError:null});const t=[];if(this.state.triggerWords)for(let e of this.state.triggerWords.split("\n"))e=e.trim(),e.length>0&&t.push(e);if(!this.state.channelId&&0===t.length)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWordsOrChannelRequired",defaultMessage:"A valid channel or a list of trigger words is required"})});const a=[];for(let e of this.state.callbackUrls.split("\n"))e=e.trim(),e.length>0&&a.push(e);if(0===a.length)return void this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.callbackUrlsRequired",defaultMessage:"One or more callback URLs are required"})});const s={team_id:this.props.team.id,channel_id:this.state.channelId,trigger_words:t,trigger_when:this.state.triggerWhen,callback_urls:a,display_name:this.state.displayName,content_type:this.state.contentType,description:this.state.description,username:this.state.username,icon_url:this.state.iconURL,id:this.props.initialHook?.id||"",create_at:this.props.initialHook?.create_at||0,update_at:this.props.initialHook?.update_at||0,delete_at:this.props.initialHook?.delete_at||0,creator_id:this.props.initialHook?.creator_id||"",token:this.props.initialHook?.token||""};this.props.action(s).then((()=>this.setState({saving:!1})))};updateDisplayName=e=>{this.setState({displayName:e.target.value})};updateDescription=e=>{this.setState({description:e.target.value})};updateContentType=e=>{this.setState({contentType:e.target.value})};updateChannelId=e=>{this.setState({channelId:e.target.value})};updateTriggerWords=e=>{this.setState({triggerWords:e.target.value})};updateTriggerWhen=e=>{this.setState({triggerWhen:parseInt(e.target.value,10)})};updateCallbackUrls=e=>{this.setState({callbackUrls:e.target.value})};updateUsername=e=>{this.setState({username:e.target.value})};updateIconURL=e=>{this.setState({iconURL:e.target.value})};render(){const e="application/x-www-form-urlencoded",t="application/json",a=this.props.header,s=this.props.footer,o=this.props.renderExtra;return m.createElement("div",{className:"backstage-content"},m.createElement($,null,m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/outgoing_webhooks`},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.header",defaultMessage:"Outgoing Webhooks"})),m.createElement(p.FormattedMessage,{id:a.id,defaultMessage:a.defaultMessage})),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal",onSubmit:this.handleSubmit},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"displayName"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.displayName",defaultMessage:"Title"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"displayName",type:"text",maxLength:64,className:"form-control",value:this.state.displayName,onChange:this.updateDisplayName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.displayName.help",defaultMessage:"Specify a title, of up to 64 characters, for the webhook settings page."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"description"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.description",defaultMessage:"Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"description",type:"text",maxLength:500,className:"form-control",value:this.state.description,onChange:this.updateDescription}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.description.help",defaultMessage:"Describe your outgoing webhook."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"contentType"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.content_Type",defaultMessage:"Content Type"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("select",{className:"form-control",value:this.state.contentType,onCh
1ange:this.updateContentType},m.createElement("option",{value:e},e),m.createElement("option",{value:t},t)),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.contentType.help1",defaultMessage:"Specify the content type by which to send the request."})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.contentType.help2",defaultMessage:"For the server to encode the parameters in a URL format in the request body, select application/x-www-form-urlencoded."})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.contentType.help3",defaultMessage:"For the server to format the request body as JSON, select application/json."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"channelId"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.channel",defaultMessage:"Channel"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(be,{value:this.state.channelId,onChange:this.updateChannelId,selectOpen:!0,selectPrivate:!1,selectDm:!1}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.channel.help",defaultMessage:"This field is optional if you specify at least one trigger word. Specify the public channel that delivers the payload to the webhook."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"triggerWords"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWords",defaultMessage:"Trigger Words (One Per Line)"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("textarea",{id:"triggerWords",rows:3,maxLength:1e3,className:"form-control",value:this.state.triggerWords,onChange:this.updateTriggerWords}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWords.help",defaultMessage:"Specify the trigger words that send an HTTP POST request to your application. The trigger can be for the channel, the outgoing webhook, or both. If you select only Channel, trigger words are optional. If you select both, the message must match both values."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"triggerWords"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWordsTriggerWhen",defaultMessage:"Trigger When"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("select",{id:"triggerWhen",className:"form-control",value:this.state.triggerWhen,onChange:this.updateTriggerWhen},m.createElement("option",{value:"0"},(0,b.Vw)({id:"add_outgoing_webhook.triggerWordsTriggerWhenFullWord",defaultMessage:"First word matches a trigger word exactly"})),m.createElement("option",{value:"1"},(0,b.Vw)({id:"add_outgoing_webhook.triggerWordsTriggerWhenStartsWith",defaultMessage:"First word starts with a trigger word"}))),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWordsTriggerWhen.help",defaultMessage:"Specify when to trigger the outgoing webhook."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"callbackUrls"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.callbackUrls",defaultMessage:"Callback URLs (One Per Line)"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("textarea",{id:"callbackUrls",rows:3,maxLength:1e3,className:"form-control",value:this.state.callbackUrls,onChange:this.updateCallbackUrls}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.callbackUrls.help",defaultMessage:"Specify the URL that the messages will be sent to. If the URL is private, add it as a {link}.",values:{link:m.createElement(Q.A,{href:K.Uk.TRUSTED_CONNECTION,location:"abstract_outgoing_webhook"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.callbackUrls.helpLinkText",defaultMessage:"trusted internal
1connection"}))}})))),this.props.enablePostUsernameOverride&&m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"username"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.username",defaultMessage:"Username"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"username",type:"text",maxLength:22,className:"form-control",value:this.state.username,onChange:this.updateUsername}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.username.help",defaultMessage:'Specify the username this integration will post as. Usernames can be up to 22 characters, and contain lowercase letters, numbers and the symbols "-", "_", and ".". If left blank, the name specified by the webhook creator is used.'})))),this.props.enablePostIconOverride&&m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"iconURL"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.icon_url",defaultMessage:"Profile Picture"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"iconURL",type:"text",maxLength:1024,className:"form-control",value:this.state.iconURL,onChange:this.updateIconURL}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.icon_url.help",defaultMessage:"Enter the URL of a .png or .jpg file for this integration to use as the profile picture when posting. The file should be at least 128 pixels by 128 pixels. If left blank, the profile picture specified by the webhook creator is used."})))),m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[this.props.serverError,this.state.clientError]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:`/${this.props.team.name}/integrations/outgoing_webhooks`},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:this.state.saving,spinningText:this.props.loading,onClick:this.handleSubmit,id:"saveWebhook"},m.createElement(p.FormattedMessage,{id:s.id,defaultMessage:s.defaultMessage})),o))))}}const Fe=(0,p.defineMessages)({footer:{id:"add_outgoing_webhook.save",defaultMessage:"Save"},header:{id:"integrations.add",defaultMessage:"Add"},loading:{id:"add_outgoing_webhook.saving",defaultMessage:"Saving..."}}),Oe=(0,s.connect)((function(e){const t=(0,r.zj)(e);return{enablePostUsernameOverride:"true"===t.EnablePostUsernameOverride,enablePostIconOverride:"true"===t.EnablePostIconOverride}}),(function(e){return{actions:(0,u.zH)({createOutgoingHook:de.Cm},e)}}))((e=>{let{team:t,actions:a,enablePostUsernameOverride:s,enablePostIconOverride:o}=e;const r=(0,n.useHistory)(),[i,l]=(0,m.useState)("");return m.createElement(Se,{team:t,header:Fe.header,footer:Fe.footer,loading:Fe.loading,renderExtra:"",action:async e=>{l("");const{data:s,error:n}=await a.createOutgoingHook(e);s?r.push(`/${t.name}/integrations/confirm?type=outgoing_webhooks&id=${s.id}`):n&&l(n.message)},serverError:i,enablePostUsernameOverride:s,enablePostIconOverride:o})}));a(37227);var Te=a(23877),xe=a(87988);function Ie(e){return(0,xe.n4)({clientFunc:M.mT.createBot,onSuccess:Te.vi.RECEIVED_BOT_ACCOUNT,params:[e]})}function Ue(e,t){return(0,xe.n4)({clientFunc:M.mT.patchBot,onSuccess:Te.vi.RECEIVED_BOT_ACCOUNT,params:[e,t]})}function Pe(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20;return(0,xe.n4)({clientFunc:M.mT.getBotsIncludeDeleted,onSuccess:Te.vi.RECEIVED_BOT_ACCOUNTS,params:[e,t]})}function Le(e){return(0,xe.n4)({clientFunc:M.mT.disableBot,onSuccess:Te.vi.RECEIVED_BOT_ACCOUNT,params:[e]})}function De(e){return(0,xe.n4)({clientFunc:M.mT.enableBot,onSuccess:Te.vi.RECEIVED_BOT_ACCOUNT,params:[e]})}var He=a(17085),Re=a(65976),je=a(74290),Be=a(8735),We=(a(76281),a(44553));const Ge=e=>{const{formatMessage:t}=(0,p.useIntl)(),[a,s]=(0,m.useState)(""),o=a.toLowerCase();let r;r=e.searchPlaceholder?e.searchPlaceholder:t({id:"backstage_list.search",defaultMessage:"Search"});let i=[],l=0;if(e.loading)i=[m.createElement(x.A,{key:"loading"})];else{let t=!0;"function"==typeof e.children?[i,t]=e.children(o):i=e.children,i=m.Children.map(i,(e=>m.cloneElement(e,{filterLowered:o}))),0!==i.length&&t?l=i.length:o?e.emptyTextSearch&&(i=[m.createElement("div",{className:"backstage-list__item backstage-list__empty",id:"emptySearchResultsMessage",key:"emptyTextSearch"},m.cloneElement(e.emptyTextSearch,{values:{...e.emptyTextSearch.props.values,searchTerm:o}}))]):e.emptyText&&(i=[m.createElement("div",{className:"backstage-list__item backstage-list__empty",key:"emptyText"}
1,e.emptyText)])}let c=null;e.addLink&&e.addText&&(c=m.createElement(n.Link,{className:"add-link",to:e.addLink},m.createElement("button",{type:"button",className:"btn btn-primary",id:e.addButtonId},m.createElement("span",null,e.addText))));const d=a.length>0,{startCount:u,endCount:g,total:h,isFirstPage:E,isLastPage:_}=((e,t,a)=>{const s=a||!e.page?0:e.page,n=a||!e.pageSize?t:e.pageSize,o=a||!e.total?t:e.total;let r=s*n+1,i=(s+1)*n;return i=i>o?o:i,0===i&&(r=0),{startCount:r,endCount:i,total:o,isFirstPage:r<=1,isLastPage:i>=o}})(e,l,d),f=l>0?i.slice(u-1,g):i;let b=e.previousPage,M=e.nextPage;return E&&(b=()=>{}),_&&(M=()=>{}),m.createElement("div",{className:"backstage-content"},m.createElement("div",{className:"backstage-header"},m.createElement("h1",null,e.header),c),e.error,m.createElement("div",{className:"backstage-filters"},m.createElement("div",{className:"backstage-filter__search"},m.createElement(D.A,null),m.createElement("input",{type:"search",className:"form-control",placeholder:r,value:a,onChange:e=>s(e.target.value),id:"searchInput"}))),m.createElement("span",{className:"backstage-list__help"},e.helpText),m.createElement("div",{className:"backstage-list"},f),m.createElement("div",{className:"backstage-footer"},m.createElement("div",{className:"backstage-footer__cell"},m.createElement(p.FormattedMessage,{id:"backstage_list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:u,endCount:g,total:h}}),m.createElement("button",{type:"button",className:"btn btn-quaternary btn-icon btn-sm ml-2 prev "+(E?"disabled":""),onClick:b,"aria-label":t({id:"backstage_list.previousButton.ariaLabel",defaultMessage:"Previous"})},m.createElement(L.A,null)),m.createElement("button",{type:"button",className:"btn btn-quaternary btn-icon btn-sm next "+(_?"disabled":""),onClick:M,"aria-label":t({id:"backstage_list.nextButton.ariaLabel",defaultMessage:"Next"})},m.createElement(P.A,null)))))};var ze=a(17461),$e=a(18515);function Ye(e,t,a){if(!t)return!0;const s=e.username||"",n=e.description||"",o=e.display_name||"";let r="plugin";return a&&a.username&&(r=a.username),!(-1===s.toLowerCase().indexOf(t)&&-1===o.toLowerCase().indexOf(t)&&-1===n.toLowerCase().indexOf(t)&&-1===r.toLowerCase().indexOf(t))}class qe extends m.PureComponent{constructor(e){super(e),this.state={confirmingId:"",creatingTokenState:"CLOSED",token:{},error:""}}enableBot=()=>{this.props.actions.enableBot(this.props.bot.user_id)};disableBot=()=>{this.props.actions.disableBot(this.props.bot.user_id)};enableUserAccessToken=e=>{this.props.actions.enableUserAccessToken(e)};disableUserAccessToken=e=>{this.props.actions.disableUserAccessToken(e)};confirmRevokeToken=e=>{this.setState({confirmingId:e})};revokeTokenConfirmed=()=>{this.props.actions.revokeUserAccessToken(this.state.confirmingId),this.closeConfirm()};closeConfirm=()=>{this.setState({confirmingId:""})};openCreateToken=()=>{this.setState({creatingTokenState:"OPEN",token:{description:""}})};closeCreateToken=()=>{this.setState({creatingTokenState:"CLOSED",token:{description:""}})};handleUpdateDescription=e=>{const t=e.target;this.setState({token:Object.assign({},this.state.token,{description:t.value})})};handleCreateToken=async e=>{if(e.preventDefault(),""===this.state.token.description)return void this.setState({error:m.createElement(p.FormattedMessage,{id:"bot.token.error.description",defaultMessage:"Please enter a description."})});const{data:t,error:a}=await this.props.actions.createUserAccessToken(this.props.bot.user_id,this.state.token.description);t?this.setState({creatingTokenState:"CREATED",token:t}):a&&this.setState({error:a.message})};render(){const e=this.props.bot.username||"",t=this.props.bot.description||"",a=this.props.bot.display_name||"";let s="plugin";this.props.fromApp?s="Apps Framework":this.props.owner&&this.props.owner.username&&(s=this.props.owner.username);const o=this.props.filter?this.props.filter.toLowerCase():"";if(!Ye(this.props.bot,o,this.props.owner))return null;const r=[];let i;Object.values(this.props.accessTokens).forEach((e=>{let t,a,s="";e.is_active?t=m.createElement("a",{id:e.id+"_deactivate",href:"#",onClick:t=>{t.preventDefault(),this.disableUserAccessToken(e.id)}},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.deactivate",defaultMessage:"Disable"})):(s="light",a=m.createElement("span",{className:"mr-2 light"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.deactivatedWarning",defaultMessage:"(Disabled)"})),t=m.createElement("a",{id:e.id+"_activate",href:"#",onClick:t=>{t.preventDefault(),this.enableUserAccessToken(e.id)}},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.activate",defaultMessage:"Enable"}))),r.push(m.createElement("div",{key:e.id,className:"bot-list__item"},m.createElement("div",{className:"item-details__row d-flex justify-content-between"},m.createElement("div",{className:s},m.createElement("div",{className:"whitespace--nowrap overflow--ellipsis"},m.createElement("b",null,m.createElement(p.FormattedMessage,{id:"user.settings.tokens.tokenDesc",defaultMessage:"Token Description: "})),e.description),m.createElement("div",{className:"setting-box__token-id whitespace--nowrap overflow--ellipsis"},m.createElement("b",null,m.createElement(p.FormattedMessage,{id:"user.settings.tokens.tokenId",defaultMessage:"Token ID: "})),e.id)),m.createElement("div",null,a,t," - ",m.createElement("a",{id:e.id+"_delete",href:"#",onClick:t=>{t.preventDefault(),this.confirmRevokeToken(e.id)}},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.delete",defaultMessage:"Delete"}))))))})),"plugin"!==s&&(i=m.createElement("div",{className:"item-actions"},m.createElement("button",{id:"createToken",className:"style--none color--link",onClick:this.openCreateToken},m.createElement(p.FormattedMessage,{id:"bot.manage.create_token",defaultMessage:"Create New Token"}))," - ",m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/bots/edit?id=${this.props.bot.user_id}`},m.createElement(p.FormattedMessage,{id:"bots.manage.edit",defaultMessage:"Edit"}))," - ",m.createElement("button",{className:"style--none color--link",onClick:this.disableBot},m.createElement(p.FormattedMessage,{id:"bot.manage.disable",defaultMessage:"Disable"})))),0!==this.props.bot.delete_at&&(i=m.createElement("div",{className:"item-actions"},m.createElement("button",{className:"style--none color--link",onClick:this.enableBot},m.createElement(p.FormattedMessage,{id:"bot.manage.enable",defaultMessage:"Enable"})))),"OPEN"===this.state.creatingTokenState?r.push(m.createElement("div",{key:"create",className:"bot-list__item"},m.createElement("div",{key:"create"},m.createElement("form",{className:"form-horizontal",onSubmit:this.handleCreateToken},m.createElement("div",{className:"row"},m.createElement("label",{className:"col-sm-auto control-label",htmlFor:"botToken"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.name",defaultMessage:"Token Description: "})),m.createElement("div",{className:"col-sm-4"}
1,m.createElement("input",{id:"botToken",autoFocus:!0,className:"form-control form-sm",type:"text",maxLength:64,value:this.state.token.description,onChange:this.handleUpdateDescription}))),m.createElement("div",null,m.createElement("div",{className:"pt-2 pb-2"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.nameHelp",defaultMessage:"Enter a description for your token to remember what it does."})),m.createElement("label",{id:"clientError",className:"has-error is-empty"},this.state.error),m.createElement("div",{className:"mt-2"},m.createElement(U.A,{btnClass:"btn-sm btn-primary",savingMessage:m.createElement(p.FormattedMessage,{id:"user.settings.tokens.save",defaultMessage:"Save"}),saving:!1}),m.createElement("button",{className:"btn btn-sm btn-tertiary",onClick:this.closeCreateToken},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.cancel",defaultMessage:"Cancel"})))))))):"CREATED"===this.state.creatingTokenState&&r.push(m.createElement("div",{key:"created",className:"bot-list__item alert alert-warning"},m.createElement("div",{className:"mb-2"},m.createElement(N.A,{additionalClassName:"mr-2"}),m.createElement(p.FormattedMessage,{id:"user.settings.tokens.copy",defaultMessage:"Please copy the access token below. You won't be able to see it again!"})),m.createElement("div",{className:"whitespace--nowrap overflow--ellipsis"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.name",defaultMessage:"Token Description: "}),this.state.token.description),m.createElement("div",{className:"whitespace--nowrap overflow--ellipsis"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.id",defaultMessage:"Token ID: "}),this.state.token.id),m.createElement("strong",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"user.settings.tokens.token",defaultMessage:"Access Token: "}),this.state.token.token),m.createElement("div",{className:"mt-2"},m.createElement("button",{className:"btn btn-sm btn-primary",onClick:this.closeCreateToken},m.createElement(p.FormattedMessage,{id:"bot.create_token.close",defaultMessage:"Close"})))));const l=b.RG(this.props.user.id,this.props.user.last_picture_update);return m.createElement("div",{className:"backstage-list__item"},m.createElement("div",{className:"bot-list-img-container"},m.createElement("img",{className:"bot-list-img",alt:"bot image",src:l})),m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("strong",{className:"item-details__name"},a+" (@"+e+")"),i),m.createElement("div",{className:"bot-details__description"},m.createElement($e.A,{message:t})),m.createElement("div",{className:"light small"},m.createElement(p.FormattedMessage,{id:"bots.managed_by",defaultMessage:"Managed by "}),s),m.createElement("div",{className:"bot-list is-empty"},r)),m.createElement(ze.A,{title:m.createElement(p.FormattedMessage,{id:"bots.token.delete",defaultMessage:"Delete Token"}),message:m.createElement(p.FormattedMessage,{id:"bots.token.confirm_text",defaultMessage:"Are you sure you want to delete the token?"}),confirmButtonText:m.createElement(p.FormattedMessage,{id:"bots.token.confirm",defaultMessage:"Delete"}),modalClass:"integrations-backstage-modal",show:""!==this.state.confirmingId,onConfirm:this.revokeTokenConfirmed,onCancel:this.closeConfirm}))}}class Ve extends m.PureComponent{constructor(e){super(e),this.state={loading:!0,loadError:"none"}}componentDidMount(){this.loadAllBots(),this.props.appsEnabled&&this.props.actions.fetchAppsBotIDs()}async loadAllBots(){const e=[];let t=K.Ay.Integrations.START_PAGE_NUM,a="none";for(;;){const s=await this.props.actions.loadBots(t,200);if(s.error){a=e.length>0?"partial":"full";break}if(!s.data)break;if(e.push(...s.data),s.data.length<200)break;t++}const s=[];for(const t of e)this.props.actions.getUser(t.owner_id),s.push(this.props.actions.getUser(t.user_id)),s.push(this.props.actions.getUserAccessTokensForUser(t.user_id));await Promise.all(s),this.setState({loading:!1,loadError:a})}renderLoadError(){return"none"===this.state.loadError?null:"partial"===this.state.loadError?m.createElement(We.A,{mode:"warning",message:m.createElement(p.FormattedMessage,{id:"bots.manage.load_error.partial",defaultMessage:"Some bot accounts could not be loaded, so this list may be incomplete. Refresh the page to try again."})}):m.createElement(We.A,{mode:"danger",message:m.createElement(p.FormattedMessage,{id:"bots.manage.load_error.full",defaultMessage:"Bot accounts could not be loaded. Refresh the page to try again."})})}DisabledSection(e){if(!e.hasDisabled)return null;const t=m.Children.map(e.disabledBots,(t=>m.cloneElement(t,{filter:e.filter})));return m.createElement(m.Fragment,null,m.createElement("div",{className:"bot-disabled"},m.createElement(p.FormattedMessage,{id:"bots.disabled",defaultMessage:"Disabled"})),m.createElement("div",{className:"bot-list__disabled"},t))}EnabledSection(e){const t=m.Children.map(e.enabledBots,(t=>m.cloneElement(t,{filter:e.filter})));return m.createElement("div",null,t)}botToJSX=e=>m.createElement(qe,{key:e.user_id,bot:e,owner:this.props.owners[e.user_id],user:this.props.users[e.user_id],accessTokens:this.props.accessTokens&&this.props.accessTokens[e.user_id]||{},actions:this.props.actions,team:this.props.team,fromApp:this.props.appsBotIDs.includes(e.user_id)});bots=e=>{const t=Object.values(this.props.bots).sort(((e,t)=>e.username.localeCompare(t.username))),a=t=>Ye(t,e,this.props.owners[t.user_id]),s=t.filter((e=>0===e.delete_at)).filter(a).map(this.botToJSX),n=t.filter((e=>e.delete_at>0)).filter(a).map(this.botToJSX);return[[m.createElement("div",{key:"sections"},m.createElement(this.EnabledSection,{enabledBots:s}),m.createElement(this.DisabledSection,{hasDisabled:n.length>0,disabledBots:n}))],s.length>0||n.length>0]};render(){return m.createElement(Ge,{header:m.createElement(p.FormattedMessage,{id:"bots.manage.header",defaultMessage:"Bot Accounts"}),addText:this.props.createBots&&m.createElement(p.FormattedMessage,{id:"bots.manage.add",defaultMessage:"Add Bot Account"}),addLink:"/"+this.props.team.name+"/integrations/bots/add",addButtonId:"addB
1otAccount",emptyText:m.createElement(p.FormattedMessage,{id:"bots.manage.empty",defaultMessage:"No bot accounts found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"bots.emptySearch",defaultMessage:"No bot accounts match <b>{searchTerm}</b>",values:{b:e=>m.createElement("b",null,e)}}),helpText:m.createElement(m.Fragment,null,m.createElement(p.FormattedMessage,{id:"bots.manage.help1",defaultMessage:"Use {botAccounts} to integrate with Mattermost through plugins or the API. Bot accounts are available to everyone on your server. ",values:{botAccounts:m.createElement(Q.A,{href:"https://mattermost.com/pl/default-bot-accounts",location:"bots"},m.createElement(p.FormattedMessage,{id:"bots.manage.bot_accounts",defaultMessage:"Bot Accounts"}))}}),m.createElement(p.FormattedMessage,{id:"bots.help2",defaultMessage:"Enable bot account creation in the <a>System Console</a>.",values:{a:e=>m.createElement(n.Link,{to:"/admin_console/integrations/bot_accounts"},e)}})),searchPlaceholder:b.Vw({id:"bots.manage.search",defaultMessage:"Search Bot Accounts"}),loading:this.state.loading,error:this.renderLoadError()},this.bots)}}const Ke=(0,s.connect)((function(e){const t="true"===(0,r.zj)(e).EnableBotAccountCreation,a=(0,je.jd)(e),s=Object.values(a),n=s.reduce(((t,a)=>(t[a.user_id]=c.wz(e,a.owner_id),t)),{}),o=s.reduce(((t,a)=>(t[a.user_id]=c.wz(e,a.user_id),t)),{});return{createBots:t,bots:a,accessTokens:e.entities.admin.userAccessTokensByUser,owners:n,users:o,appsBotIDs:(0,Be.cA)(e),appsEnabled:(0,Re.cO)(e)}}),(function(e){return{actions:(0,u.zH)({fetchAppsBotIDs:de.cA,loadBots:Pe,getUserAccessTokensForUser:He.GA,createUserAccessToken:He.NE,revokeUserAccessToken:He.XE,enableUserAccessToken:He.Yp,disableUserAccessToken:He.$q,getUser:He.wz,disableBot:Le,enableBot:De},e)}}))(Ve);a(5673),a(30164),a(21279);var Je=a(79342),Xe=a(87131),Qe=a(68124);const Ze="System Admin",et="Member";class tt extends m.PureComponent{previewBlob=null;constructor(e){super(e),this.state={error:"",username:this.props.bot?this.props.bot.username:"",displayName:this.props.bot?this.props.bot.display_name:"",description:this.props.bot?this.props.bot.description:"",adding:!1,image:te,role:Je.FV(this.props.roles||"")?Ze:et,postAll:!!this.props.bot&&Je.QF(this.props.roles||""),postChannels:!!this.props.bot&&Je.HF(this.props.roles||""),orientationStyles:{transform:"",transformOrigin:""},pictureFile:null}}updateUsername=e=>{this.setState({username:e.target.value})};updateDisplayName=e=>{this.setState({displayName:e.target.value})};updateDescription=e=>{this.setState({description:e.target.value})};updateRole=e=>{this.setState({role:e.target.value})};updatePostAll=e=>{this.setState({postAll:e.target.checked})};updatePostChannels=e=>{this.setState({postChannels:e.target.checked})};updatePicture=e=>{if(e.target.files&&e.target.files[0]){const t=e.target.files[0];this.previewBlob=URL.createObjectURL(t);const a=new FileReader;a.onload=e=>{const t=Qe.hM(e.target?.result),a=Qe.R6(t);this.setState({image:this.previewBlob||"",orientationStyles:a})},a.readAsArrayBuffer(t),e.target.value="",this.setState({pictureFile:t})}else this.setState({pictureFile:null,image:""})};setDefault=()=>{this.setState({pictureFile:"default",image:te})};isFile(e){return void 0!==e.size}updateRoles=async e=>{let t=o.Bz.SYSTEM_USER_ROLE;this.state.role===Ze?t+=" "+o.Bz.SYSTEM_ADMIN_ROLE:this.state.postAll?t+=" "+o.Bz.SYSTEM_POST_ALL_ROLE:this.state.postChannels&&(t+=" "+o.Bz.SYSTEM_POST_ALL_PUBLIC_ROLE);const a=await this.props.actions.updateUserRoles(e.user_id,t);return a?a.error:null};handleSubmit=async e=>{if(e.preventDefault(),this.state.adding)return;if(!this.state.username||this.state.username.length<3)return void this.setState({error:m.createElement(p.FormattedMessage,{id:"bots.manage.add.invalid_username",defaultMessage:"Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores."})});if(this.state.pictureFile&&this.isFile(this.state.pictureFile)){if(!K.je.includes(this.state.pictureFile.type))return void this.setState({error:m.createElement(p.FormattedMessage,{id:"user.settings.general.validImage",defaultMessage:"Only BMP, JPG or PNG images may be used for profile pictures"})});if(this.state.pictureFile.size>this.props.maxFileSize)return void this.setState({error:m.createElement(p.FormattedMessage,{id:"user.settings.general.imageTooLarge",defaultMessage:"Unable to upload profile image. File is too large."})})}this.setState({adding:!0,error:""});const t={username:this.state.username.toLowerCase().trim(),display_name:this.state.displayName,description:this.state.description};let a,s;if(this.props.bot){const e=await this.props.actions.patchBot(this.props.bot.user_id,t);if(e?(a=e.data,s=e.error):s=b.Vw({id:"bot.edit_failed",defaultMessage:"Failed to edit bot"}),!s&&a&&(this.state.pictureFile&&"default"!==this.state.pictureFile?s=(await this.props.actions.uploadProfileImage(a.user_id,this.state.pictureFile)).error:this.state.pictureFile&&"default"===this.state.pictureFile&&await this.props.actions.setDefaultProfileImage(a.user_id
1)),!s&&a&&(s=this.updateRoles(a)),a)return void(0,V.J)().push(`/${this.props.team.name}/integrations/bots`)}else{const e=b.Am(t.username);if(e){let t;return t=e.id===K.vJ.INVALID_LAST_CHARACTER?{adding:!1,error:m.createElement(p.FormattedMessage,{id:"bots.manage.add.invalid_last_char",defaultMessage:"Bot usernames cannot have a period as the last character"})}:{adding:!1,error:m.createElement(p.FormattedMessage,{id:"bots.manage.add.invalid_username",defaultMessage:"Usernames have to begin with a lowercase letter and be 3-22 characters long. You can use lowercase letters, numbers, periods, dashes, and underscores."})},void this.setState(t)}const n=await this.props.actions.createBot(t);n?(a=n.data,s=n.error):s=b.Vw({id:"bot.create_failed",defaultMessage:"Failed to create bot"});let o="";if(!s&&a){this.state.pictureFile&&"default"!==this.state.pictureFile?await this.props.actions.uploadProfileImage(a.user_id,this.state.pictureFile):await this.props.actions.setDefaultProfileImage(a.user_id);const e=await this.props.actions.createUserAccessToken(a.user_id,b.Vw({id:"bot.token.default.description",defaultMessage:"Default Token"}));if(!e||e.error)return void(0,V.J)().push(`/${this.props.team.name}/integrations/bots`);o=e.data.token}if(!s&&a&&(s=this.updateRoles(a)),a)return void(0,V.J)().push(`/${this.props.team.name}/integrations/confirm?type=bots&id=${a.user_id}&token=${o}`)}this.setState({adding:!1}),s&&this.setState({error:s.message})};render(){let e=m.createElement(p.FormattedMessage,{id:"bots.manage.add.add",defaultMessage:"Add"}),t=m.createElement(p.FormattedMessage,{id:"bots.manage.add.create",defaultMessage:"Create Bot Account"}),a=m.createElement(p.FormattedMessage,{id:"bots.manage.add.creating",defaultMessage:"Creating..."});this.props.bot&&(e=m.createElement(p.FormattedMessage,{id:"bots.manage.edit",defaultMessage:"Edit"}),t=m.createElement(p.FormattedMessage,{id:"bots.manage.edit.title",defaultMessage:"Update"}),a=m.createElement(p.FormattedMessage,{id:"bots.manage.edit.editing",defaultMessage:"Updating..."}));let s,o="",r=m.createElement(Xe.A,{title:m.createElement(p.FormattedMessage,{id:"bot.remove_profile_picture",defaultMessage:"Remove Bot Icon"})},m.createElement("a",{className:"bot-profile__remove",onClick:this.setDefault},m.createElement("span",null,"Ã")));return this.props.bot&&!this.state.pictureFile?o=this.props.user?b.RG(this.props.user.id,this.props.user.last_picture_update):b.RG(this.props.bot.user_id):(o=this.state.image,s=this.state.orientationStyles,this.state.image===te&&(r=null)),m.createElement("div",{className:"backstage-content"},m.createElement($,null,m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/bots`},m.createElement(p.FormattedMessage,{id:"bots.manage.header",defaultMessage:"Bot Accounts"})),e),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal",onSubmit:this.handleSubmit},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"username"},m.createElement(p.FormattedMessage,{id:"bots.add.username",defaultMessage:"Username"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"username",type:"text",maxLength:22,className:"form-control",value:this.state.username,onChange:this.updateUsername}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.username.help",defaultMessage:"You can use lowercase letters, numbers, periods, dashes, and underscores."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"boticon"},m.createElement(p.FormattedMessage,{id:"bots.add.icon",defaultMessage:"Bot Icon"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("div",{className:"bot-img-container"},m.createElement("img",{className:"bot-img",alt:"bot image",src:o,style:s}),r),m.createElement("div",{className:"btn btn-primary btn-file"},m.createElement(p.FormattedMessage,{id:"bots.image.upload",defaultMessage:"Upload Image"}),m.createElement("input",{className:"btn-file__input",accept:K.YM.ACCEPT_STATIC_IMAGE,type:"file",onChange:this.updatePicture})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"displayName"},m.createElement(p.FormattedMessage,{id:"bots.add.displayName",defaultMessage:"Display Name"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"displayName",type:"text",maxLength:64,className:"form-control",value:this.state.displayName,onChange:this.updateDisplayName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.display_name.help",defaultMessage:"(Optional) You can choose to display your bot's full name rather than
1its username."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"description"},m.createElement(p.FormattedMessage,{id:"bot.add.description",defaultMessage:"Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"description",type:"text",maxLength:1024,className:"form-control",value:this.state.description,onChange:this.updateDescription}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.description.help",defaultMessage:"(Optional) Let others know what this bot does."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"role"},m.createElement(p.FormattedMessage,{id:"bot.add.role",defaultMessage:"Role"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("select",{className:"form-control",value:this.state.role,disabled:!this.props.editingUserHasManageSystem,onChange:this.updateRole},m.createElement("option",{value:et},b.Vw({id:"bot.add.role.member",defaultMessage:"Member"})),m.createElement("option",{value:Ze},b.Vw({id:"bot.add.role.admin",defaultMessage:"System Admin"}))),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.role.help",defaultMessage:"Choose what role the bot should have."})))),m.createElement("div",{className:"row bot-profile__section"},m.createElement("div",{className:"col-md-5 col-sm-8 col-sm-offset-4"},m.createElement(p.FormattedMessage,{id:"admin.manage_roles.botAdditionalRoles",defaultMessage:"Select additional permissions for the account. <link>Read more about roles and permissions</link>.",values:{link:e=>m.createElement(Q.A,{href:K.i3.PERSONAL_ACCESS_TOKENS,location:"add_bot"},e)}}))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"postAll"},m.createElement(p.FormattedMessage,{id:"bot.add.post_all",defaultMessage:"post:all"})),m.createElement("div",{className:"col-md-5 col-sm-8 checkbox"},m.createElement("div",{className:"checkbox no-padding"},m.createElement("label",{htmlFor:"postAll"},m.createElement("input",{id:"postAll",type:"checkbox",checked:this.state.postAll||this.state.role===Ze,onChange:this.updatePostAll,disabled:!this.props.editingUserHasManageSystem||this.state.role===Ze}),m.createElement(p.FormattedMessage,{id:"bot.add.post_all.enabled",defaultMessage:"Enabled"}))),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.post_all.help",defaultMessage:"Bot will have access to post to all Mattermost channels including direct messages."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"postChannels"},m.createElement(p.FormattedMessage,{id:"bot.add.post_channels",defaultMessage:"post:channels"})),m.createElement("div",{className:"col-md-5 col-sm-8 checkbox"},m.createElement("div",{className:"checkbox no-padding"},m.createElement("label",{htmlFor:"postChannels"},m.createElement("input",{id:"postChannels",type:"checkbox",checked:this.state.postChannels||this.state.role===Ze||this.state.postAll,onChange:this.updatePostChannels,disabled:!this.props.editingUserHasManageSystem||this.state.role===Ze||this.state.postAll}),m.createElement(p.FormattedMessage,{id:"bot.add.post_channels.enabled",defaultMessage:"Enabled"}))),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"bot.add.post_channels.help",defaultMessage:"Bot will have access to post to all Mattermost public channels."})))),m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[this.state.error]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:`/${this.props.team.name}/integrations/bots`},m.createElement(p.FormattedMessage,{id:"bots.manage.add.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:this.state.adding,spinningText:a,onClick:this.handleSubmit,id:"saveBot"},t)))))}}
1const at=(0,s.connect)((function(e,t){const a=(0,r.zj)(e),s=new URLSearchParams(t.location.search).get("id"),n=(0,je.s9)(e),l=n&&s?n[s]:void 0,m=l?(0,c.wz)(e,l.user_id):void 0,d=m?m.roles:void 0;return{maxFileSize:parseInt(a.MaxFileSize,10),bot:l,roles:d,editingUserHasManageSystem:(0,i.y4)(e,{permission:o.xB.MANAGE_SYSTEM}),user:m}}),(function(e){return{actions:(0,u.zH)({createBot:Ie,patchBot:Ue,uploadProfileImage:He.OB,setDefaultProfileImage:He.Ae,createUserAccessToken:He.NE,updateUserRoles:He.eA},e)}}))(tt);var st=a(37226),nt=a(46177),ot=a.n(nt),rt=a(85406),it=a(53654);const lt=e=>{const t=(0,m.useRef)(!1),[a,n]=(0,m.useState)(null),[o,i]=(0,m.useState)(!1),c=(0,s.useSelector)(Be.FA),d="true"===(0,s.useSelector)(r.zj).EnableOutgoingOAuthConnections,u=(0,s.useSelector)(l.Sy),g=(0,s.useDispatch)(),h=(0,m.useCallback)((async e=>{const t=await g((0,de.oe)(u,e));i(!1),t.data&&t.data.length?n(t.data[0]):n(null)}),[g,u]),E=(0,m.useMemo)((()=>ot()((e=>h(e)),1e3)),[h]);(0,m.useEffect)((()=>{t.current||(t.current=!0,d&&(g((0,de.FA)(u)),e.value&&(i(!0),h(e.value))))}),[d,e.value,u,h,g,t]);const _=Object.values(c),f=m.createElement(I.A,{autoComplete:"off",id:"url",maxLength:1024,className:"form-control",value:e.value,onChange:t=>{e.onChange(t),d&&(i(!0),E(t.target.value))},placeholder:e.placeholder});if(!_.length)return f;let b;return b=o?m.createElement("span",null,m.createElement(it.A,null)):a?m.createElement(m.Fragment,null,m.createElement("span",null,m.createElement(rt.OauthIcon,{size:20})),m.createElement("span",{className:"outgoing-oauth-audience-match-message"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.connected",defaultMessage:'Connected to "{connectionName}"',values:{connectionName:a.name}}))):m.createElement(m.Fragment,null,m.createElement("span",null,m.createElement(rt.InformationOutlineIcon,{size:20})),m.createElement("span",{className:"outgoing-oauth-audience-match-message"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.not_connected",defaultMessage:"Not linked to an OAuth connection"}))),m.createElement(m.Fragment,null,f,m.createElement("div",{className:"outgoing-oauth-audience-match-message-container"},b))};class ct extends m.PureComponent{constructor(e){super(e),this.state=this.getStateFromCommand(this.props.initialCommand||{})}getStateFromCommand=e=>({displayName:e?.display_name??"",description:e?.description??"",trigger:e?.trigger??"",url:e?.url??"",method:e?.method??"P",username:e?.username??"",iconUrl:e?.icon_url??"",autocomplete:e?.auto_complete??!1,autocompleteHint:e?.auto_complete_hint??"",autocompleteDescription:e?.auto_complete_desc??"",saving:!1,clientError:null});getBackstageHeader=()=>"string"==typeof this.props.header?m.createElement("span",null,this.props.header):m.createElement(p.FormattedMessage,{id:this.props.header.id,defaultMessage:this.props.header.defaultMessage});getBackstageFooter=()=>"string"==typeof this.props.footer?m.createElement("span",null,this.props.footer):m.createElement(p.FormattedMessage,{id:this.props.footer.id,defaultMessage:this.props.footer.defaultMessage});handleSubmit=e=>{if(e.preventDefault(),this.state.saving)return;this.setState({saving:!0,clientError:""});let t=this.state.trigger.trim().toLowerCase();
10===t.indexOf("/")&&(t=t.substr(1));const a={display_name:this.state.displayName,description:this.state.description,trigger:t,url:this.state.url.trim(),method:this.state.method,username:this.state.username,icon_url:this.state.iconUrl,auto_complete:this.state.autocomplete,team_id:this.props.team.id,auto_complete_desc:"",auto_complete_hint:"",token:"",create_at:0,update_at:0,delete_at:0,id:"",creator_id:""};a.auto_complete&&(a.auto_complete_desc=this.state.autocompleteDescription??"",a.auto_complete_hint=this.state.autocompleteHint??""),a.trigger?0!==a.trigger.indexOf("/")?-1===a.trigger.indexOf(" ")?a.trigger.length<K.YM.MIN_TRIGGER_LENGTH||a.trigger.length>K.YM.MAX_TRIGGER_LENGTH?this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_command.triggerInvalidLength",defaultMessage:"A trigger word must contain between {min} and {max} characters",values:{min:K.YM.MIN_TRIGGER_LENGTH,max:K.YM.MAX_TRIGGER_LENGTH}})}):a.url?this.props.action(a).then((()=>this.setState({saving:!1}))):this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_command.urlRequired",defaultMessage:"A request URL is required"})}):this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_command.triggerInvalidSpace",defaultMessage:"A trigger word must not contain spaces"})}):this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_command.triggerInvalidSlash",defaultMessage:"A trigger word cannot begin with a /"})}):this.setState({saving:!1,clientError:m.createElement(p.FormattedMessage,{id:"add_command.triggerRequired",defaultMessage:"A trigger word is required"})})};updateDisplayName=e=>{this.setState({displayName:e.target.value})};updateDescription=e=>{this.setState({description:e.target.value})};updateTrigger=e=>{this.setState({trigger:e.target.value})};updateUrl=e=>{this.setState({url:e.target.value})};updateMethod=e=>{const t=e.target.value;"P"!==t&&"G"!==t&&""!==t||this.setState({method:t})};updateUsername=e=>{this.setState({username:e.target.value})};updateIconUrl=e=>{this.setState({iconUrl:e.target.value})};updateAutocomplete=e=>{this.setState({autocomplete:e.target.checked})};updateAutocompleteHint=e=>{this.setState({autocompleteHint:e.target.value})};updateAutocompleteDescription=e=>{this.setState({autocompleteDescription:e.target.value})};render(){let e=null,t=null;return this.state.autocomplete&&(e=m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"autocompleteHint"},m.createElement(p.FormattedMessage,{id:"add_command.autocompleteHint",defaultMessage:"Autocomplete Hint"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(I.A,{id:"autocompleteHint",type:"text",maxLength:1024,className:"form-control",value:this.state.autocompleteHint,onChange:this.updateAutocompleteHint,placeholder:(0,p.defineMessage)({id:"add_command.autocompleteHint.placeholder",defaultMessage:"Example: [Patient Name]"})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.autocompleteHint.help",defaultMessage:"(Optional) Specify the arguments associated with your slash command. These are displayed as help on the autocomplete list."})))),t=m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"autocompleteDescription"},m.createElement(p.FormattedMessage,{id:"add_command.autocompleteDescription",defaultMessage:"Autocomplete Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(I.A,{id:"description",type:"text",maxLength:128,className:"form-control",value:this.state.autocompleteDescription,onChange:this.updateAutocompleteDescription,placeholder:(0,p.defineMessage)({id:"add_command.autocompleteDescription.placeholder",defaultMessage:'Example: "Returns search results for patient records"'})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.autocompleteDescription.help",defaultMessage:"(Optional) Describe your slash command for the autocomplete list."}))))),m.createElement("div",{className:"backstage-content row"},m.createElement($,null,m.createElement(n.Link,{to:"/"+this.props.team.name+"/integrations/commands"},m.createElement(p.FormattedMessage,{id:"installed_command.header",defaultMessage:"Slash Commands"})),this.getBackstageHeader()),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal",onSubmit:this.handleSubmit},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"displayName"},m.createElement(p.FormattedMessage,{id:"add_command.displayName",defaultMessage:"Title"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"displayName",type:"text",maxLength:64,className:"form-control",value:this.state.displayName,onChange:this.updateDisplayName}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.displayName.help",defaultMessage:"Specify a title, of up to 64 characters, for the slash command settings page."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"description"},m.createElement(p.FormattedMessage,{id:"add_command.description",defaultMessage:"Description"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"description",type:"text",maxLength:128,className:"form-control",value:this.state.description,onChange:this.updateDescription}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.description.help",defaultMessage:"Describe your slash command."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"trigger"},m.createElement(p.FormattedMessage,{id:"add_command.trigger",defaultMessage:"Command Trigger Word"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(I.A,{id:"trigger",type:"text",maxLength:K.YM.MAX_TRIGGER_LENGTH,className:"form-control",value:this.state.trigger,onChange:this.updateTrigger,placeholder:(0,p.defineMessage)({id:"add_command.trigger.placeholder",defaultMessage:'Command trigger e.g. "hello" not including the slash'})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.trigger.help",defaultMessage:"Specify a trigger word that is not a built-in command, does not contain spaces, and does not begin with the slash character."})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.trigger.helpExamples",defaultMessage:"Examples: client, employee, patient, weather"})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.trigger.helpReserved",defaultMessage:"Reserved: {link}",values:{link:m.createElement(Q.A,{href:K.i3.CUSTOM_SLASH_COMMANDS,location:"abstract_command"},m.createElement(p.FormattedMessage,{id:"add_command.trigger.helpReservedLinkText",defaultMessage:"See built-in slash commands"}))}})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"url"},m.createElement(p.FormattedMessage,{id:"add_command.url",defaultMessage:"Request URL"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(lt,{value:this.state.url,onChange:this.updateUrl,placeholder:(0,p.defineMessage)({id:"add_command.url.placeholder",defaultMessage:"Must start with http:// or https://"})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.url.help",defaultMessage:"Specify the callback URL to receive the HTTP PO
1ST or GET event request when the slash command is run."})),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.outgoing_oauth_connections.help_text",defaultMessage:"You can connect commands to <link>outgoing OAuth connections</link>.",values:{link:e=>m.createElement("a",{href:"https://mattermost.com/pl/outgoing-oauth-connections"},e)}})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"method"},m.createElement(p.FormattedMessage,{id:"add_command.method",defaultMessage:"Request Method"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("select",{id:"method",className:"form-control",value:this.state.method,onChange:this.updateMethod},m.createElement("option",{value:"P"},b.Vw({id:"add_command.method.post",defaultMessage:"POST"})),m.createElement("option",{value:"G"},b.Vw({id:"add_command.method.get",defaultMessage:"GET"}))),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.method.help",defaultMessage:"Specify the type of request, either POST or GET, sent to the endpoint that Mattermost hits to reach your application."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"username"},m.createElement(p.FormattedMessage,{id:"add_command.username",defaultMessage:"Response Username"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(I.A,{id:"username",type:"text",maxLength:64,className:"form-control",value:this.state.username,onChange:this.updateUsername,placeholder:(0,p.defineMessage)({id:"add_command.username.placeholder",defaultMessage:"Username"})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.username.help",defaultMessage:'(Optional) Specify the name to use when posting responses for this slash command. Usernames can be up to 22 characters, and contain lowercase letters, numbers, and the symbols "-", "_", and ".". If left blank, your Mattermost username is used.'})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"iconUrl"},m.createElement(p.FormattedMessage,{id:"add_command.iconUrl",defaultMessage:"Response Icon"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement(I.A,{id:"iconUrl",type:"text",maxLength:1024,className:"form-control",value:this.state.iconUrl,onChange:this.updateIconUrl,placeholder:(0,p.defineMessage)({id:"add_command.iconUrl.placeholder",defaultMessage:"https://www.example.com/myicon.png"})}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.iconUrl.help",defaultMessage:"(Optional) Enter the URL of a .png or .jpg file to use as the icon when posting responses to this slash command. The file must be at least 128 pixels by 128 pixels. If left blank, your profile picture is used."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"autocomplete"},m.createElement(p.FormattedMessage,{id:"add_command.autocomplete",defaultMessage:"Autocomplete"})),m.createElement("div",{className:"col-md-5 col-sm-8 checkbox"},m.createElement("input",{id:"autocomplete",type:"checkbox",checked:this.state.autocomplete,onChange:this.updateAutocomplete}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_command.autocomplete.help",defaultMessage:'(Optional) Show your slash command on the autocomplete list when someone types "/" in the input box.'})))),e,t,m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[this.props.serverError,this.state.clientError]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:"/"+this.props.team.name+"/integrations/commands"},m.createElement(p.FormattedMessage,{id:"add_command.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:this.state.saving,spinningText:this.props.loading,onClick:this.handleSubmit,id:"saveCommand"},this.getBackstageFooter()),this.props.renderExtra))))}}const mt=(0,s.connect)(null,(function(e){return{actions:(0,u.zH)({addCommand:de.np},e)}}
1))((e=>{let{team:t,actions:a}=e;const s=(0,n.useHistory)(),{formatMessage:o}=(0,p.useIntl)(),r=o({id:"integrations.add",defaultMessage:"Add"}),i=o({id:"add_command.save",defaultMessage:"Save"}),l=o({id:"add_command.saving",defaultMessage:"Saving..."}),[c,d]=(0,m.useState)("");return m.createElement(ct,{team:t,header:r,footer:i,loading:l,action:async e=>{d("");const{data:n,error:o}=await a.addCommand(e);n?s.push(`/${t.name}/integrations/commands/confirm?type=commands&id=${n.id}`):o&&d(o.message)},serverError:c})})),dt=e=>{let{label:t,value:a}=e;const s=(0,p.useIntl)(),n=(0,m.useCallback)((e=>{e.preventDefault(),(0,b.lW)(a)}),[a]);return document.queryCommandSupported("copy")?m.createElement(Xe.A,{title:t},m.createElement("button",{"data-testid":"copyText",className:"btn btn-link icon-content-copy ml-2","aria-label":s.formatMessage(t),onClick:n})):null},ut=m.memo(dt);var gt=a(63155);const pt=(0,p.defineMessages)({copyClientId:{id:"integrations.copy_client_id",defaultMessage:"Copy Client Id"},copyClientSecret:{id:"integrations.copy_client_secret",defaultMessage:"Copy Client Secret"},copyToken:{id:"integrations.copy_token",defaultMessage:"Copy Token"},copyUsername:{id:"integrations.copy_username",defaultMessage:"Copy Username"}}),ht=(0,s.connect)((function(e){return{commands:(0,Be.Ro)(e),oauthApps:(0,Be.u$)(e),incomingHooks:(0,Be.Rm)(e),outgoingHooks:(0,Be.PY)(e),bots:(0,je.s9)(e),outgoingOAuthConnections:(0,Be.FA)(e)}}))((e=>{let{team:t,location:a,commands:s,oauthApps:o,incomingHooks:r,outgoingHooks:i,bots:l,outgoingOAuthConnections:c}=e;const d=(0,n.useHistory)(),u=new URLSearchParams(a.search).get("type")||"",g=new URLSearchParams(a.search).get("id")||"";(0,m.useEffect)((()=>(window.addEventListener("keypress",h),()=>{window.removeEventListener("keypress",h)})));const h=e=>{"Enter"===e.key&&d.push("/"+t.name+"/integrations/"+u)};let E,_,f;const b=s[g],M=r[g],k=i[g],v=o[g],N=c[g],y=l[g];if(u===K.YM.Integrations.COMMAND&&b){const e=b.token;E=m.createElement(p.FormattedMessage,{id:"slash_commands.header",defaultMessage:"Slash Commands"}),_=m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"add_command.doneHelp",defaultMessage:"Your slash command is set up. The following token will be sent in the outgoing payload. Please use it to verify the request came from your Mattermost team (details at <link>Slash Commands</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_CUSTOM_SLASH_COMMANDS,location:"confirm_integration"},e)}})),f=m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_command.token",defaultMessage:"<b>Token</b>: {token}",values:{token:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyToken,value:e}))}else if(u===K.YM.Integrations.INCOMING_WEBHOOK&&M){const e=(0,gt.vV)()+"/hooks/"+M.id;E=m.createElement(p.FormattedMessage,{id:"incoming_webhooks.header",defaultMessage:"Incoming Webhooks"}),_=m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.doneHelp",defaultMessage:"Your incoming webhook is set up. Please send data to the following URL (details at <link>Incoming Webhooks</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_INCOMING_WEBHOOKS,location:"confirm_integration"},e)}})),f=m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_incoming_webhook.url",defaultMessage:"<b>URL</b>: {url}",values:{url:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyToken,value:e}))}else if(u===K.YM.Integrations.OUTGOING_WEBHOOK&&k){const e=k.token;E=m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.header",defaultMessage:"Outgoing Webhooks"}),_=m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.doneHelp",defaultMessage:"Your outgoing webhook is set up. The following token will be sent in the outgoing payload. Please use it to verify that the request came from your Mattermost team (details at <link>Outgoing Webhooks</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_OUTGOING_WEBHOOKS,location:"confirm_integration"},e)}})),f=m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.token",defaultMessage:"<b>Token</b>: {token}",values:{token:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyToken,value:e}))}else if(u===K.YM.Integrations.OAUTH_APP&&v){const e=v.id,t=v.client_secret,a=!t||""===t;E=m.createElement(p.FormattedMessage,{id:"installed_oauth2_apps.header",defaultMessage:"OAuth 2.0 Applications"}
1),_=[],a?_.push(m.createElement("p",{key:"add_oauth_app.doneHelp"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.doneHelp.public",defaultMessage:"Your OAuth 2.0 public client application is set up. Please use the following Client ID when requesting authorization for your application. Public clients must use PKCE for authorization (details at <link>oAuth 2.0 Applications</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_OAUTH2,location:"confirm_integration"},e)}}))):_.push(m.createElement("p",{key:"add_oauth_app.doneHelp"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.doneHelp",defaultMessage:"Your OAuth 2.0 application is set up. Please use the following Client ID and Client Secret when requesting authorization for your application (details at <link>oAuth 2.0 Applications</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_OAUTH2,location:"confirm_integration"},e)}}))),_.push(m.createElement("p",{key:"add_oauth_app.clientId"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.clientId",defaultMessage:"<b>Client ID</b>: {id}",values:{id:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyClientId,value:e}),!a&&m.createElement(m.Fragment,null,m.createElement("br",null),m.createElement(p.FormattedMessage,{id:"add_oauth_app.clientSecret",defaultMessage:"<b>Client Secret</b>: {secret}",values:{secret:m.createElement("code",null,t),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyClientSecret,value:t})))),_.push(m.createElement("p",{key:"add_oauth_app.doneUrlHelp"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.doneUrlHelp",defaultMessage:"Here are your authorized redirect URLs."}))),f=m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_oauth_app.url",defaultMessage:"<b>URL(s)</b>: {url}",values:{url:v.callback_urls.join(", "),b:e=>m.createElement("b",null,e)}}))}else if(u===K.YM.Integrations.OUTGOING_OAUTH_CONNECTIONS&&N){const e=N.client_id,t=N.credentials_username,a=N.credentials_password;E=m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.header",defaultMessage:"Outgoing OAuth Connections"}),_=[],_.push(m.createElement("p",{key:"add_outgoing_oauth_connection.doneHelp"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.doneHelp",defaultMessage:"Your Outgoing OAuth 2.0 Connection is set up. When a request is sent to one of the following Audience URLs, the Client ID and Client Secret will now be used to retrieve a token from the Token URL, before sending the integration request (details at <link>Outgoing OAuth 2.0 Connections</link>).",values:{link:e=>m.createElement(Q.A,{href:K.i3.SETUP_OAUTH2,location:"confirm_integration"},e)}}))),_.push(m.createElement("p",{key:"add_outgoing_oauth_connection.clientId"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.clientId",defaultMessage:"<b>Client ID</b>: {id}",values:{id:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement("br",null),m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.clientSecret",defaultMessage:"<b>Client Secret</b>: ********",values:{b:e=>m.createElement("b",null,e)}}))),"password"===N.grant_type&&_.push(m.createElement("p",{key:"add_outgoing_oauth_connection.username"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.username",defaultMessage:"<b>Username</b>: {username}",values:{username:t,b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyUsername,value:t||""}),m.createElement("br",null),m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.password",defaultMessage:"<b>Password</b>: {password}",values:{password:a,b:e=>m.createElement("b",null,e)}}))),f=m.createElement(m.Fragment,null,m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.token_url",defaultMessage:"<b>Token URL</b>: {url}",values:{url:m.createElement("code",null,N.oauth_token_url),b:e=>m.createElement("b",null,e)}})),m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.audience_urls",defaultMessage:"<b>Audience URL(s)</b>: {url}",values:{url:m.createElement("code",null,N.audiences.join(", ")),b:e=>m.createElement("b",null,e)}})))}else{if(u!==K.YM.Integrations.BOT||!y)return d.replace(`/error?type=${K.f2.PAGE_NOT_FOUND}`),null;{const e=new URLSearchParams(a.search).get("token")||"";E=m.createElement(p.FormattedMessage,{id:"bots.manage.header",defaultMessage:"Bot Accounts"}),_=m.createElement("p",null,m.createElement(p.FormattedMessage,{id:"bots.manage.created.text",defaultMessage:"Your bot account <strong>{botname}</strong> has been created successfully. Please use the following access token to connect to the bot (see <link>documentation</link> for further details).",values:{botname:y.display_name||y.username,strong:e=>m.createElement("b",null,e),link:e=>m.createElement(Q.A,{href:"https://mattermost.com/pl/default-bot-accounts",location:"confirm_integration"},e)}})),f=m.createElement("p",{className:"word-break--all"},m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.token",defaultMessage:"<b>Token</b>: {token}",values:{token:m.createElement("code",null,e),b:e=>m.createElement("b",null,e)}}),m.createElement(ut,{label:pt.copyToken,value:e}),m.createElement("br",null),m.createElement("br",null),m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.token.message",defaultMessage:"Make sure to add this bot account to teams and channels you want it to interact in. See <link>documentation</link> to learn more.",values:{link:e=>m.createElement(Q.A,{href:"https://mattermost.com/pl/default-bot-accounts",location:"confirm_integration"},e)}}))}}return m.createElement("div",{className:"backstage-content row"},m.createElement($,null,m.createElement(n.Link,{to:"/"+t.name+"/integrations/"+u},E),m.createElement(p.FormattedMessage,{id:"integrations.add",defaultMessage:"Add"})),m.createElement("div",{className:"backstage-form backstage-form__confirmation"},m.createElement("h4",{className:"backstage-form__title",id:"formTitle"},m.createElement(p.FormattedMessage,{id:"integrations.successful",defaultMessage:"Setup Successful"})),_,f,m.createElement("div",{className:"backstage-form__footer"},m.createElement(n.Link,{className:"btn btn-primary",type:"submit",to:"/"+t.name+"/integrations/"+u,id:"doneButton"},m.createElement(p.FormattedMessage,{id:"integrations.done",defaultMessage:"Done"})))))}
1)),Et=(0,p.defineMessages)({footer:{id:"edit_command.update",defaultMessage:"Update"},header:{id:"integrations.edit",defaultMessage:"Edit"},loading:{id:"edit_command.updating",defaultMessage:"Updating..."}});class _t extends m.PureComponent{constructor(e){super(e),this.newCommand=void 0,this.state={originalCommand:null,showConfirmModal:!1,serverError:""}}componentDidMount(){this.props.enableCommands&&this.props.actions.getCustomTeamCommands(this.props.team.id).then((()=>{this.setState({originalCommand:Object.values(this.props.commands).filter((e=>e.id===this.props.commandId))[0]})}))}editCommand=async e=>{this.newCommand=e,this.state.originalCommand?.id&&(e.id=this.state.originalCommand.id),this.state.originalCommand?.url!==this.newCommand.url||this.state.originalCommand?.trigger!==this.newCommand.trigger||this.state.originalCommand?.method!==this.newCommand.method?this.handleConfirmModal():await this.submitCommand()};handleConfirmModal=()=>{this.setState({showConfirmModal:!0})};confirmModalDismissed=()=>{this.setState({showConfirmModal:!1})};submitCommand=async()=>{this.setState({serverError:""});const{data:e,error:t}=await this.props.actions.editCommand(this.newCommand);e?(0,V.J)().push(`/${this.props.team.name}/integrations/commands`):(this.setState({showConfirmModal:!1}),t&&this.setState({serverError:t.message}))};renderExtra=()=>{const e=m.createElement(p.FormattedMessage,{id:"update_command.update",defaultMessage:"Update"}),t=m.createElement(p.FormattedMessage,{id:"update_command.confirm",defaultMessage:"Edit Slash Command"}),a=m.createElement(p.FormattedMessage,{id:"update_command.question",defaultMessage:"Your changes may break the existing slash command. Are you sure you would like to update it?"});return m.createElement(ze.A,{title:t,message:a,confirmButtonText:e,modalClass:"integrations-backstage-modal",show:this.state.showConfirmModal,onConfirm:this.submitCommand,onCancel:this.confirmModalDismissed})};render(){return this.state.originalCommand?m.createElement(ct,{team:this.props.team,header:Et.header,footer:Et.footer,loading:Et.loading,renderExtra:this.renderExtra(),action:this.editCommand,serverError:this.state.serverError,initialCommand:this.state.originalCommand}):m.createElement(x.A,null)}}const ft=(0,s.connect)((function(e,t){const a=(0,r.zj)(e),s=new URLSearchParams(t.location.search).get("id"),n="true"===a.EnableCommands;return{commandId:s,commands:(0,Be.Ro)(e),enableCommands:n}}),(function(e){return{actions:(0,u.zH)({getCustomTeamCommands:de.hB,editCommand:de.UQ},e)}}))(_t);function bt(e,t){return!t||-1!==e.display_name.toLowerCase().indexOf(t)||-1!==e.description.toLowerCase().indexOf(t)||-1!==e.trigger.toLowerCase().indexOf(t)}class Mt extends m.PureComponent{handleRegenToken=e=>{e.preventDefault(),this.props.onRegenToken(this.props.command)};handleDelete=()=>{this.props.onDelete(this.props.command)};render(){const e=this.props.command;if(!bt(e,this.props.filter?this.props.filter.toLowerCase():""))return null;let t;t=e.display_name?e.display_name:m.createElement(p.FormattedMessage,{id:"installed_commands.unnamed_command",defaultMessage:"Unnamed Slash Command"});let a=null;e.description&&(a=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__description"},e.description)));let s="- /"+e.trigger;e.auto_complete&&e.auto_complete_hint&&(s+=" "+e.auto_complete_hint);let o=null;this.props.canChange&&(o=m.createElement("div",{className:"item-actions"},m.createElement("button",{className:"style--none color--link",onClick:this.handleRegenToken},m.createElement(p.FormattedMessage,{id:"installed_integrations.regenToken",defaultMessage:"Regenerate Token"}))," - ",m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/commands/edit?id=${e.id}`},m.createElement(p.FormattedMessage,{id:"installed_integrations.edit",defaultMessage:"Edit"}))," - ",m.createElement(A,{modalMessage:m.createElement(p.FormattedMessage,{id:"installed_commands.delete.confirm",defaultMessage:"This action permanently deletes the slash command and breaks any integrations using it. Are you sure you want to delete it?"}),onDelete:this.handleDelete})));const r=e.token;return m.createElement("div",{className:"backstage-list__item"},m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("div",{className:"item-details__name"},m.createElement("strong",null,t)),m.createElement("span",{className:"item-details__trigger"},s),o),a,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.token",defaultMessage:"Token: {token}",values:{token:m.createElement("code",null,r)}}),m.createElement(ut,{label:(0,p.defineMessage)({id:"integrations.copy_token",defaultMessage:"Copy Token"}),value:r}
1))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.creation",defaultMessage:"Created by {creator} on {createAt, date, full}",values:{creator:this.props.creator.username,createAt:e.create_at}})))))}}class kt extends m.PureComponent{regenCommandToken=e=>{this.props.actions.regenCommandToken(e.id)};deleteCommand=e=>{this.props.actions.deleteCommand(e.id)};commandCompare(e,t){let a=e.display_name;a||(a=b.Vw({id:"installed_commands.unnamed_command",defaultMessage:"Unnamed Slash Command"}));let s=t.display_name;return s||(s=b.Vw({id:"installed_commands.unnamed_command",defaultMessage:"Unnamed Slash Command"})),a.localeCompare(s)}render(){const e=e=>this.props.commands.filter((e=>e.team_id===this.props.team.id)).filter((t=>bt(t,e))).sort(this.commandCompare).map((e=>{const t=this.props.canManageOthersSlashCommands||this.props.user.id===e.creator_id;return m.createElement(Mt,{key:e.id,team:this.props.team,command:e,onRegenToken:this.regenCommandToken,onDelete:this.deleteCommand,creator:this.props.users[e.creator_id]||{},canChange:t})}));return m.createElement(Ge,{header:m.createElement(p.FormattedMessage,{id:"installed_commands.header",defaultMessage:"Slash Commands"}),addText:m.createElement(p.FormattedMessage,{id:"installed_commands.add",defaultMessage:"Add Slash Command"}),addLink:"/"+this.props.team.name+"/integrations/commands/add",addButtonId:"addSlashCommand",emptyText:m.createElement(p.FormattedMessage,{id:"installed_commands.empty",defaultMessage:"No commands found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"installed_commands.search.empty",defaultMessage:"No slash commands match <b>{searchTerm}</b>",values:{b:e=>m.createElement("b",null,e)}}),helpText:m.createElement(p.FormattedMessage,{id:"installed_commands.help",defaultMessage:"Use slash commands to connect external tools to Mattermost. {buildYourOwn} or visit the {appDirectory} to find self-hosted, third-party apps and integrations.",values:{buildYourOwn:m.createElement(Q.A,{href:K.i3.SETUP_CUSTOM_SLASH_COMMANDS,location:"installed_commands"},m.createElement(p.FormattedMessage,{id:"installed_commands.help.buildYourOwn",defaultMessage:"Build Your Own"})),appDirectory:m.createElement(Q.A,{href:"https://mattermost.com/marketplace",location:"installed_commands"},m.createElement(p.FormattedMessage,{id:"installed_commands.help.appDirectory",defaultMessage:"App Directory"}))}}),searchPlaceholder:b.Vw({id:"installed_commands.search",defaultMessage:"Search Slash Commands"}),loading:this.props.loading},(t=>{const a=e(t);return[a,a.length>0]}))}}const vt=(0,s.connect)((function(e,t){return{canManageOthersSlashCommands:(0,i.mg)(e,t.team.id,o.xB.MANAGE_OTHERS_SLASH_COMMANDS)}}),(function(e){return{actions:(0,u.zH)({regenCommandToken:de.QT,deleteCommand:de.x3},e)}}))(kt),Nt=e=>{let{component:t,extraProps:a,...s}=e;return m.createElement(n.Route,Object.assign({},s,{render:e=>m.createElement(t,Object.assign({},a,e))}))};class yt extends m.PureComponent{constructor(e){super(e),this.state={loading:!0}}componentDidMount(){this.props.enableCommands&&this.props.actions.loadCommandsAndProfilesForTeam(this.props.team?.id||"").then((()=>this.setState({loading:!1})))}render(){const e={loading:this.state.loading,commands:this.props.commands||[],users:this.props.users,team:this.props.team,user:this.props.user};return m.createElement("div",null,m.createElement(n.Switch,null,m.createElement(n.Route,{exact:!0,path:`${this.props.match.url}/`,render:()=>m.createElement(n.Redirect,{to:`${this.props.match.url}/installed`})}),m.createElement(Nt,{extraProps:e,path:`${this.props.match.url}/installed`,component:vt}),m.createElement(Nt,{extraProps:e,path:`${this.props.match.url}/add`,component:mt}),m.createElement(Nt,{extraProps:e,path:`${this.props.match.url}/edit`,component:ft}),m.createElement(Nt,{extraProps:e,path:`${this.props.match.url}/confirm`,component:ht})))}}const At=(0,s.connect)((function(e){const t="true"===(0,r.zj)(e).EnableCommands;return{commands:Object.values((0,Be.Ro)(e)),users:(0,c.lo)(e),enableCommands:t}}),(function(e){return{actions:(0,u.zH)({loadCommandsAndProfilesForTeam:st.oN},e)}}))(yt),Ct=(0,p.defineMessages)({footer:{id:"update_incoming_webhook.update",defaultMessage:"Update"},header:{id:"integrations.edit",defaultMessage:"Edit"},loading:{id:"update_incoming_webhook.updating",defaultMessage:"Updating..."}});class wt extends m.PureComponent{constructor(e){super(e),this.state={serverError:""}}componentDidMount(){this.props.enableIncomingWebhooks&&this.props.actions.getIncomingHook(this.props.hookId)}editIncomingHook=async e=>{this.newHook=e,this.props.hook?.id&&(e.id=this.props.hook.id),await this.submitHook()};submitHook=async()=>
1{if(this.setState({serverError:""}),!this.newHook)return;const e=await this.props.actions.updateIncomingHook(this.newHook);if("data"in e)(0,V.J)().push(`/${this.props.team.name}/integrations/incoming_webhooks`);else if("error"in e){const{error:t}=e;this.setState({serverError:t.message})}};render(){return this.props.hook?m.createElement(Me,{team:this.props.team,header:Ct.header,footer:Ct.footer,loading:Ct.loading,enablePostUsernameOverride:this.props.enablePostUsernameOverride,enablePostIconOverride:this.props.enablePostIconOverride,canBypassChannelLock:this.props.canBypassChannelLock,action:this.editIncomingHook,serverError:this.state.serverError,initialHook:this.props.hook}):m.createElement(x.A,null)}}const St=(0,s.connect)((function(e,t){const a=(0,r.zj)(e),s="true"===a.EnableIncomingWebhooks,n="true"===a.EnablePostUsernameOverride,l="true"===a.EnablePostIconOverride,c=new URLSearchParams(t.location.search).get("id")||"",m=(0,i.pU)(e,o.xB.BYPASS_INCOMING_WEBHOOK_CHANNEL_LOCK);return{hookId:c,hook:e.entities.integrations.incomingHooks[c],enableIncomingWebhooks:s,enablePostUsernameOverride:n,enablePostIconOverride:l,canBypassChannelLock:m}}),(function(e){return{actions:(0,u.zH)({updateIncomingHook:de.n4,getIncomingHook:de.MB},e)}}))(wt);a(35214);const Ft={id:"integrations.edit",defaultMessage:"Edit"},Ot={id:"update_incoming_webhook.update",defaultMessage:"Update"},Tt={id:"update_incoming_webhook.updating",defaultMessage:"Updating..."};class xt extends m.PureComponent{constructor(e){super(e),this.state={showConfirmModal:!1,serverError:""},this.newApp=this.props.oauthApp}componentDidMount(){this.props.enableOAuthServiceProvider&&this.props.actions.getOAuthApp(this.props.oauthAppId)}editOAuthApp=async e=>{this.newApp=e,this.props.oauthApp.id&&(e.id=this.props.oauthApp.id),!1===(this.props.oauthApp.callback_urls.length===e.callback_urls.length&&this.props.oauthApp.callback_urls.every(((t,a)=>t===e.callback_urls[a])))?this.handleConfirmModal():await this.submitOAuthApp()};handleConfirmModal=()=>{this.setState({showConfirmModal:!0})};confirmModalDismissed=()=>{this.setState({showConfirmModal:!1})};submitOAuthApp=async()=>{this.setState({serverError:""});const e=await this.props.actions.editOAuthApp(this.newApp);if("data"in e&&e.data)(0,V.J)().push(`/${this.props.team.name}/integrations/oauth2-apps`);else if(this.setState({showConfirmModal:!1}),"error"in e){const{error:t}=e;this.setState({serverError:t.message})}};renderExtra=()=>{const e=m.createElement(p.FormattedMessage,{id:"update_command.update",defaultMessage:"Update"}),t=m.createElement(p.FormattedMessage,{id:"update_oauth_app.confirm",defaultMessage:"Edit OAuth 2.0 application"}),a=m.createElement(p.FormattedMessage,{id:"update_oauth_app.question",defaultMessage:"Your changes may break the existing OAuth 2.0 application. Are you sure you would like to update it?"});return m.createElement(ze.A,{title:t,message:a,confirmButtonText:e,modalClass:"integrations-backstage-modal",show:this.state.showConfirmModal,onConfirm:this.submitOAuthApp,onCancel:this.confirmModalDismissed})};render(){return this.props.oauthApp?m.createElement(Ae,{team:this.props.team,header:Ft,footer:Ot,loading:Tt,renderExtra:this.renderExtra(),action:this.editOAuthApp,serverError:this.state.serverError,initialApp:this.props.oauthApp}):m.createElement(x.A,null)}}const It=(0,s.connect)((function(e,t){const a=(0,r.zj)(e),s=new URLSearchParams(t.location.search).get("id")||"",n="true"===a.EnableOAuthServiceProvider;return{oauthAppId:s,oauthApp:e.entities.integrations.oauthApps[s],enableOAuthServiceProvider:n}}),(function(e){return{actions:(0,u.zH)({getOAuthApp:de.zv,editOAuthApp:de.Bb},e)}}))(xt),Ut={id:"integrations.edit",defaultMessage:"Edit"},Pt={id:"update_outgoing_webhook.update",defaultMessage:"Update"},Lt={id:"update_outgoing_webhook.updating",defaultMessage:"Updating..."};class Dt extends m.PureComponent{constructor(e){super(e),this.state={showConfirmModal:!1,serverError:""}}componentDidMount(){this.props.enableOutgoingWebhooks&&this.props.actions.getOutgoingHook(this.props.hookId)}editOutgoingHook=async e=>{this.newHook=e,this.props.hook.id&&(e.id=this.props.hook.id),this.props.hook.token&&(e.token=this.props.hook.token);const t=this.props.hook.trigger_words.length===e.trigger_words.length&&this.props.hook.trigger_words.every(((t,a)=>t===e.trigger_words[a])),a=this.props.hook.callback_urls.length===e.callback_urls.length&&this.props.hook.callback_urls.every(((t,a)=>t===e.callback_urls[a]));this.props.hook.content_type===e.content_type&&t&&a?await this.submitHook():this.handleConfirmModal()};handleConfirmModal=()=>{this.setState({showConfirmModal:!0})};confirmModalDismissed=()=>{this.setState({showConfirmModal:!1})};submitHook=async()=>{this.setState({serverError:""});const{data:e,error:t}=await this.props.actions.updateOutgoingHook(this.newHook);e?(0,V.J)().push(`/${this.props.team.name}/integrations/outgoing_webhooks`):(this.setState({showConfirmModal:!1}),t&&this.setState({serverError:t.message}))};renderExtra=()=>{const e=m.createElement(p.FormattedMessage,{id:"update_outgoing_webhook.update",defaultMessage:"Update"}),t=m.createElement(p.FormattedMessage,{id:"update_outgoing_webhook.confirm",defaultMessage:"Edit Outgoing Webhook"}),a=m.createElement(p.FormattedMessage,{id:"update_outgoing_webhook.question",defaultMessage:"Your changes may break the existing outgoing webhook. Are you sure you would like to update it?"});return m.createElement(ze.A,{title:t,message:a,confirmButtonText:e,modalClass:"integrations-backstage-modal",show:this.state.showConfirmModal,onConfirm:this.submitHook,onCancel:this.confirmModalDismissed})};render(){return this.props.hook?m.createElement(Se,{team:this.props.team,header:Ut,footer
1:Pt,loading:Lt,renderExtra:this.renderExtra(),action:this.editOutgoingHook,serverError:this.state.serverError,initialHook:this.props.hook,enablePostUsernameOverride:this.props.enablePostUsernameOverride,enablePostIconOverride:this.props.enablePostIconOverride}):m.createElement(x.A,null)}}const Ht=(0,s.connect)((function(e,t){const a=(0,r.zj)(e),s=new URLSearchParams(t.location.search).get("id"),n="true"===a.EnableOutgoingWebhooks,o="true"===a.EnablePostUsernameOverride,i="true"===a.EnablePostIconOverride;return{hookId:s,hook:e.entities.integrations.outgoingHooks[s],enableOutgoingWebhooks:n,enablePostUsernameOverride:o,enablePostIconOverride:i}}),(function(e){return{actions:(0,u.zH)({updateOutgoingHook:de.P5,getOutgoingHook:de.Gx},e)}}))(Dt);function Rt(e,t,a){return!a||-1!==e.display_name.toLowerCase().indexOf(a)||-1!==e.description.toLowerCase().indexOf(a)||!(!e.channel_id||!t||-1===t.name.toLowerCase().indexOf(a))}class jt extends m.PureComponent{handleDelete=()=>{this.props.onDelete(this.props.incomingWebhook)};render(){const e=this.props.incomingWebhook,t=this.props.channel;if(!Rt(e,t,this.props.filter?this.props.filter.toLowerCase():""))return null;let a;a=e.display_name?e.display_name:t?t.display_name:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.unknown_channel",defaultMessage:"A Private Webhook"});let s=null;e.description&&(s=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__description"},e.description)));let o=null;this.props.canChange&&(o=m.createElement("div",{className:"item-actions"},m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/incoming_webhooks/edit?id=${e.id}`},m.createElement(p.FormattedMessage,{id:"installed_integrations.edit",defaultMessage:"Edit"}))," - ",m.createElement(A,{modalMessage:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.delete.confirm",defaultMessage:"This action permanently deletes the incoming webhook and breaks any integrations using it. Are you sure you want to delete it?"}),onDelete:this.handleDelete})));const r=(0,gt.vV)()+"/hooks/"+e.id;return m.createElement("div",{className:"backstage-list__item"},m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("strong",{className:"item-details__name"},a),o),s,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_integrations.url",defaultMessage:"URL: {url}",values:{url:m.createElement("code",null,r)}}),m.createElement("span",null,m.createElement(ut,{label:(0,p.defineMessage)({id:"integrations.copy_url",defaultMessage:"Copy URL"}),value:r})))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.creation",defaultMessage:"Created by {creator} on {createAt, date, full}",values:{creator:this.props.creator.username,createAt:e.create_at}})))))}}class Bt extends m.PureComponent{constructor(e){super(e),this.state={page:0,loading:!0}}componentDidMount(){this.loadPage(0)}deleteIncomingWebhook=e=>{this.props.actions.removeIncomingHook(e.id)};loadPage=async e=>{this.props.enableIncomingWebhooks&&this.setState({loading:!0},(async()=>{await this.props.actions.loadIncomingHooksAndProfilesForTeam(this.props.team.id,e,200,!0),this.setState({page:e,loading:!1})}))};nextPage=()=>{this.loadPage(this.state.page+1)};previousPage=()=>{this.loadPage(this.state.page-1)};incomingWebhookCompare=(e,t)=>{let a=e.display_name;if(!a){const t=this.props.channels[e.channel_id];a=t?t.display_name:b.Vw({id:"installed_incoming_webhooks.unknown_channel",defaultMessage:"A Private Webhook"})}const s=t.display_name;return a.localeCompare(s)};incomingWebhooks=e=>this.props.incomingHooks.sort(this.incomingWebhookCompare).filter((t=>Rt(t,this.props.channels[t.channel_id],e))).map((e=>{const t=this.props.canManageOthersWebhooks||this.props.user.id===e.user_id,a=this.props.channels[e.channel_id];return m.createElement(jt,{key:e.id,incomingWebhook:e,onDelete:this.deleteIncomingWebhook,creator:this.props.users[e.user_id]||{},canChange:t,team:this.props.team,channel:a})}));render(){return m.createElement(Ge,{header:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.header",defaultMessage:"Incoming Webhooks"}),addText:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.add",defaultMessage:"Add Incoming Webhook"}),addLink:"/"+this.props.team.name+"/integrations/incoming_webhooks/add",addButtonId:"addIncomingWebhook",emptyText:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.empty",defaultMessage:"No incoming webhooks found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.emptySearch",defaultMessage:"No incoming webhooks match <strong>{searchTerm}</strong>",values:{strong:e=>m.createElement("strong",null,e)}}),helpText:m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.help",defaultMessage:"Use incoming webhooks to connect external tools to Mattermost. {buildYourOwn} or visit the {appDirectory} to find self-hosted, third-party apps and integrations.",values:{buildYourOwn:m.createElement(Q.A,{location:"installed_incoming_webhooks",href:K.i3.SETUP_INCOMING_WEBHOOKS},m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.help.buildYourOwn",defaultMessage:"Build Your Own"})),appDirectory:m.createElement(Q.A,{href:"https://mattermost.com/marketplace",location:"installed_incoming_webhooks"},m.createElement(p.FormattedMessage,{id:"installed_incoming_webhooks.help.appDirectory",defaultMessage:"App Directory"}))}}),searchPlaceholder:b.Vw({id:"installed_incoming_webhooks.search",defaultMessage:"Search Incoming Webhooks"}),loading:this.state.loading,nextPage:this.nextPage,previousPage:this.previousPage,page:this.state.page,pageSize:200,total:this.props.incomingHooksTotalCount},(e=>{const t=this.incomingWebhooks(e);return[t,t.length>0]}
1))}}const Wt=(0,s.connect)((function(e){const t=(0,l.Sy)(e),a=(0,Be.ms)(e),s=(0,Be.kv)(e),n=(0,r.zj)(e),m=(0,i.mg)(e,t,o.xB.MANAGE_OTHERS_INCOMING_WEBHOOKS),d="true"===n.EnableIncomingWebhooks;return{incomingHooks:a,incomingHooksTotalCount:s,channels:(0,ge.ou)(e),users:(0,c.lo)(e),canManageOthersWebhooks:m,enableIncomingWebhooks:d}}),(function(e){return{actions:(0,u.zH)({loadIncomingHooksAndProfilesForTeam:st.Kq,removeIncomingHook:de.Gl},e)}}))(Bt),Gt="***************";function zt(e,t){return!t||e.name.toLowerCase().includes(t)}class $t extends m.PureComponent{constructor(e){super(e),this.state={clientSecret:Gt}}handleShowClientSecret=e=>{e&&e.preventDefault&&e.preventDefault(),this.setState({clientSecret:this.props.oauthApp.client_secret})};handleHideClientSecret=e=>{e.preventDefault(),this.setState({clientSecret:Gt})};handleRegenerate=e=>{e.preventDefault(),this.props.onRegenerateSecret(this.props.oauthApp.id).then((e=>{let{error:t}=e;t?this.setState({error:t.message}):(this.setState({error:null}),this.handleShowClientSecret())}))};handleDelete=()=>{this.props.onDelete(this.props.oauthApp)};render(){const{oauthApp:e,creatorName:t}=this.props;let a,s,o;if(this.state.error&&(a=m.createElement(Y.Ay,{error:this.state.error})),!zt(e,this.props.filter))return null;s=e.name?e.name:m.createElement(p.FormattedMessage,{id:"installed_integrations.unnamed_oauth_app",defaultMessage:"Unnamed OAuth 2.0 Application"}),e.description&&(o=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__description"},e.description)));const r=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_integrations.callback_urls",defaultMessage:"Callback URLs: {urls}",values:{urls:e.callback_urls.join(", ")}})));let i;i=e.is_trusted?m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.trusted.yes",defaultMessage:"Yes"}):m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.trusted.no",defaultMessage:"No"});const l=!e.client_secret||""===e.client_secret;let c,d,u,g,h;if(l?d=m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.client_type",defaultMessage:"Client Type: "}),m.createElement("strong",null,m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.public_client",defaultMessage:"Public Client (No Secret)"}))):this.state.clientSecret===Gt?(c=m.createElement("button",{id:"showSecretButton",className:"style--none color--link",onClick:this.handleShowClientSecret},m.createElement(p.FormattedMessage,{id:"installed_integrations.showSecret",defaultMessage:"Show Secret"})),d=m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.client_secret",defaultMessage:"Client Secret: "}),m.createElement("strong",null,this.state.clientSecret))):(c=m.createElement("button",{id:"hideSecretButton",className:"style--none color--link",onClick:this.handleHideClientSecret},m.createElement(p.FormattedMessage,{id:"installed_integrations.hideSecret",defaultMessage:"Hide Secret"})),d=m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.client_secret",defaultMessage:"Client Secret: "}),m.createElement("strong",null,this.state.clientSecret),m.createElement(ut,{label:Yt.copyClientSecret,value:this.state.clientSecret}))),l||(u=m.createElement("button",{id:"regenerateSecretButton",className:"style--none color--link",onClick:this.handleRegenerate},m.createElement(p.FormattedMessage,{id:"installed_integrations.regenSecret",defaultMessage:"Regenerate Secret"}))),e.icon_url&&(g=m.createElement("div",{className:"integration__icon integration-list__icon"},m.createElement("img",{alt:"get app screenshot",src:e.icon_url}))),!this.props.fromApp){const t=[];l||(t.push(c),t.push(u)),t.push(m.createElement(n.Link,{key:"edit",to:`/${this.props.team?.name}/integrations/oauth2-apps/edit?id=${e.id}`},m.createElement(p.FormattedMessage,{id:"installed_integrations.edit",defaultMessage:"Edit"}))),t.push(m.createElement(A,{key:"delete",modalMessage:m.createElement(p.FormattedMessage,{id:"installed_oauth_a
1pps.delete.confirm",defaultMessage:"This action permanently deletes the OAuth 2.0 application and breaks any integrations using it. Are you sure you want to delete it?"}),onDelete:this.handleDelete})),h=m.createElement("div",{className:"item-actions"},t.map(((e,t)=>m.createElement(m.Fragment,{key:t},t>0&&" - ",e))))}let E=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.fromApp",defaultMessage:"Managed by Apps Framework"})));return this.props.fromApp||(E=m.createElement(m.Fragment,null,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.is_trusted",defaultMessage:"Is Trusted: "}),m.createElement("strong",null,i))),e.is_dynamically_registered&&m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.dynamically_registered",defaultMessage:"Dynamically Registered: "}),m.createElement("strong",null,m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.dynamically_registered.yes",defaultMessage:"Yes"})))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.client_id",defaultMessage:"Client ID: "}),m.createElement("strong",null,e.id),m.createElement(ut,{label:Yt.copyClientId,value:e.id}))),m.createElement("div",{className:"item-details__row"},d),r,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.creation",defaultMessage:"Created by {creator} on {createAt, date, full}",values:{creator:t,createAt:e.create_at}}))))),m.createElement("div",{className:"backstage-list__item"},g,m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("strong",{className:"item-details__name"},s),h),a,o,E))}}const Yt=(0,p.defineMessages)({copyClientId:{id:"integrations.copy_client_id",defaultMessage:"Copy Client Id"},copyClientSecret:{id:"integrations.copy_client_secret",defaultMessage:"Copy Client Secret"}}),qt=(0,s.connect)((function(e,t){const a=t.oauthApp||{};return{creatorName:(0,b.GZ)(e,(0,c.wz)(e,a.creator_id))}}))($t);class Vt extends m.PureComponent{constructor(e){super(e),this.state={loading:!0}}componentDidMount(){this.props.enableOAuthServiceProvider&&this.props.actions.loadOAuthAppsAndProfiles().then((()=>this.setState({loading:!1})))}deleteOAuthApp=e=>{e&&e.id&&this.props.actions.deleteOAuthApp(e.id)};oauthAppCompare(e,t){let a=e.name.toString();a||(a=(0,b.Vw)({id:"installed_integrations.unnamed_oauth_app",defaultMessage:"Unnamed OAuth 2.0 Application"}));let s=t.name.toString();return s||(s=(0,b.Vw)({id:"installed_integrations.unnamed_oauth_app",defaultMessage:"Unnamed OAuth 2.0 Application"})),a.localeCompare(s)}oauthApps=e=>Object.values(this.props.oauthApps).filter((t=>zt(t,e))).sort(this.oauthAppCompare).map((e=>m.createElement(qt,{key:e.id,oauthApp:e,onRegenerateSecret:this.props.actions.regenOAuthAppSecret,onDelete:this.deleteOAuthApp,team:this.props.team,creatorName:"",fromApp:this.props.appsOAuthAppIDs.includes(e.id)}
1)));render(){if(!this.props.team)return null;let e;return this.props.enableOAuthServiceProvider&&this.props.canManageOauth&&(e={addLink:"/"+this.props.team.name+"/integrations/oauth2-apps/add",addText:(0,b.Vw)({id:"installed_oauth_apps.add",defaultMessage:"Add OAuth 2.0 Application"}),addButtonId:"addOauthApp"}),m.createElement(Ge,Object.assign({header:m.createElement(p.FormattedMessage,{id:"installed_oauth2_apps.header",defaultMessage:"OAuth 2.0 Applications"}),helpText:m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.help",defaultMessage:"Create {oauthApplications} to securely integrate bots and third-party apps with Mattermost. Visit the {appDirectory} to find available self-hosted apps.",values:{oauthApplications:m.createElement(Q.A,{href:K.i3.SETUP_OAUTH2,location:"installed_oauth_apps"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.help.oauthApplications",defaultMessage:"OAuth 2.0 applications"})),appDirectory:m.createElement(Q.A,{href:"https://mattermost.com/marketplace/",location:"installed_oauth_apps"},m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.help.appDirectory",defaultMessage:"App Directory"}))}}),emptyText:m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.empty",defaultMessage:"No OAuth 2.0 Applications found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"installed_oauth_apps.emptySearch",defaultMessage:"No OAuth 2.0 Applications match <strong>{searchTerm}</strong>",values:{strong:e=>m.createElement("strong",null,e)}}),searchPlaceholder:(0,b.Vw)({id:"installed_oauth_apps.search",defaultMessage:"Search OAuth 2.0 Applications"}),loading:this.state.loading},e),(e=>{const t=this.oauthApps(e);return[t,t.length>0]}))}}const Kt=(0,s.connect)((function(e){const t="true"===(0,r.zj)(e).EnableOAuthServiceProvider;return{canManageOauth:(0,i.y4)(e,{permission:o.xB.MANAGE_OAUTH}),oauthApps:(0,Be.u$)(e),appsOAuthAppIDs:(0,Be.jX)(e),enableOAuthServiceProvider:t,team:(0,l.H7)(e)}}),(function(e){return{actions:(0,u.zH)({loadOAuthAppsAndProfiles:st.$6,regenOAuthAppSecret:de.Y$,deleteOAuthApp:de.cP},e)}}))(Vt);function Jt(e,t,a){if(!a)return!0;const{display_name:s,description:n,trigger_words:o}=e;if(s&&-1!==s.toLowerCase().indexOf(a)||n&&-1!==n.toLowerCase().indexOf(a))return!0;if(o)for(const e of o)if(-1!==e.toLowerCase().indexOf(a))return!0;return!(!t||!t.name||-1===t.name.toLowerCase().indexOf(a))}class Xt extends m.PureComponent{handleRegenToken=e=>{e.preventDefault(),this.props.onRegenToken(this.props.outgoingWebhook)};handleDelete=()=>{this.props.onDelete(this.props.outgoingWebhook)};makeDisplayName(e,t){return e.display_name?e.display_name:t?t.display_name:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.unknown_channel",defaultMessage:"A Private Webhook"})}render(){const e=this.props.outgoingWebhook,t=this.props.channel,a=this.props.filter?this.props.filter.toLowerCase():"";if(e&&!Jt(e,t,a))return null;const s=this.makeDisplayName(e,t);let o=null;e.description&&(o=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__description"},e.description)));let r=null;e.trigger_words&&e.trigger_words.length>0&&(r=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__trigger-words"},m.createElement(p.FormattedMessage,{id:"installed_integrations.triggerWords",defaultMessage:"Trigger Words: {triggerWords}",values:{triggerWords:e.trigger_words.join(", ")}}))));const i=m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_integrations.callback_urls",defaultMessage:"Callback URLs: {urls}",values:{urls:e.callback_urls.join(", ")}})));let l;0===e.trigger_when?l=m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWordsTriggerWhenFullWord",defaultMessage:"First word matches a trigger word exactly"}):1===e.trigger_when&&(l=m.createElement(p.FormattedMessage,{id:"add_outgoing_webhook.triggerWordsTriggerWhenStartsWith",defaultMessage:"First word starts with a trigger word"}));let c=null;return this.props.canChange&&(c=m.createElement("div",{className:"item-actions"},m.createElement("button",{className:"style--none color--link",onClick:this.handleRegenToken},m.createElement(p.FormattedMessage,{id:"installed_integrations.regenToken",defaultMessage:"Regenerate Token"}))," - ",m.createElement(n.Link,{to:`/${this.props.team.name}/integrations/outgoing_webhooks/edit?id=${e.id}`},m.createElement(p.FormattedMessage,{id:"installed_integrations.edit",defaultMessage:"Edit"}))," - ",m.createElement(A,{modalMessage:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.delete.confirm",defaultMessage:"This action permanently deletes the outgoing webhook and breaks any integrations using it. Are you sure you want to delete it?"}),onDelete:this.handleDelete}))),m.createElement("div",{className:"backstage-list__item"},m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("strong",{className:"item-details__name"},s),c),o,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__content_type"},m.createElement(p.FormattedMessage,{id:"installed_integrations.content_type",defaultMessage:"Content-Type: {contentType}",values:{contentType:e.content_type||"application/x-www-form-urlencoded"}}))),r,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__trigger-when"},m.createElement(p.FormattedMessage,{id:"installed_integrations.triggerWhen",defaultMessage:"Trigger When: {triggerWhen}",values:{triggerWhen:l}}))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.token",defaultMessage:"Token: {token}",values:{token:m.createElement("code",null,e.token)}}),m.createElement(ut,{label:(0,p.defineMessage)({id:"integrations.copy_token",defaultMessage:"Copy Token"}),value:e.token}))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.creation",defaultMessage:"Created by {creator} on {createAt, date, full}",values:{creator:this.props.creator.username,createAt:e.create_at}}))),i))}}class Qt extends m.PureComponent{constructor(e){super(e),this.state={loading:!0}}componentDidMount(){this.props.enableOutgoingWebhooks&&this.props.actions.loadOutgoingHooksAndProfilesForTeam(this.props.teamId,K.YM.Integrations.START_PAGE_NUM,K.YM.Integrations.PAGE_SIZE).then((()=>this.setState({loading:!1})))}regenOutgoingWebhookToken=e=>{this.props.actions.regenOutgoingHookToken(e.id)};removeOutgoingHook=e=>{this.props.actions.removeOutgoingHook(e.id)};outgoingWebhookCompare=(e,t)=>
1{let a=e.display_name;if(!a){const t=this.props.channels[e.channel_id];a=t?t.display_name:(0,b.Vw)({id:"installed_outgoing_webhooks.unknown_channel",defaultMessage:"A Private Webhook"})}let s=t.display_name;if(!s){const e=this.props.channels[t.channel_id];s=e?e.display_name:(0,b.Vw)({id:"installed_outgoing_webhooks.unknown_channel",defaultMessage:"A Private Webhook"})}return a.localeCompare(s)};outgoingWebhooks=e=>this.props.outgoingWebhooks.sort(this.outgoingWebhookCompare).filter((t=>Jt(t,this.props.channels[t.channel_id],e))).map((e=>{const t=this.props.canManageOthersWebhooks||this.props.user.id===e.creator_id,a=this.props.channels[e.channel_id];return m.createElement(Xt,{key:e.id,outgoingWebhook:e,onRegenToken:this.regenOutgoingWebhookToken,onDelete:this.removeOutgoingHook,creator:this.props.users[e.creator_id]||{},canChange:t,team:this.props.team,channel:a})}));render(){return m.createElement(Ge,{header:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.header",defaultMessage:"Outgoing Webhooks"}),addText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.add",defaultMessage:"Add Outgoing Webhook"}),addLink:"/"+this.props.team.name+"/integrations/outgoing_webhooks/add",addButtonId:"addOutgoingWebhook",emptyText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.empty",defaultMessage:"No outgoing webhooks found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.search.empty",defaultMessage:"No outgoing webhooks match <b>{searchTerm}</b>",values:{b:e=>m.createElement("b",null,e)}}),helpText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.help",defaultMessage:"Use outgoing webhooks to connect external tools to Mattermost. {buildYourOwn} or visit the {appDirectory} to find self-hosted, third-party apps and integrations.",values:{buildYourOwn:m.createElement(Q.A,{href:K.i3.SETUP_OUTGOING_WEBHOOKS,location:"installed_outgoing_webhooks"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.help.buildYourOwn",defaultMessage:"Build your own"})),appDirectory:m.createElement(Q.A,{href:"https://mattermost.com/marketplace",location:"installed_outgoing_webhooks"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_webhooks.help.appDirectory",defaultMessage:"App Directory"}))}}),searchPlaceholder:(0,b.Vw)({id:"installed_outgoing_webhooks.search",defaultMessage:"Search Outgoing Webhooks"}),loading:this.state.loading},(e=>{const t=this.outgoingWebhooks(e);return[t,t.length>0]}))}}const Zt=(0,s.connect)((function(e){const t=(0,r.zj)(e),a=(0,l.Sy)(e),s=(0,i.mg)(e,a,o.xB.MANAGE_OTHERS_OUTGOING_WEBHOOKS),n=(0,Be.PY)(e),m=Object.keys(n).map((e=>n[e])).filter((e=>e.team_id===a)),d="true"===t.EnableOutgoingWebhooks;return{outgoingWebhooks:m,channels:(0,ge.ou)(e),users:(0,c.lo)(e),teamId:a,canManageOthersWebhooks:s,enableOutgoingWebhooks:d}}),(function(e){return{actions:(0,u.zH)({loadOutgoingHooksAndProfilesForTeam:st.yL,removeOutgoingHook:de.w1,regenOutgoingHookToken:de.UN},e)}}))(Qt);var ea=function(e){return e.INITIAL="initial",e.DIRTY="dirty",e.VALIDATING="validating",e.VALIDATED="validated",e.ERROR="error",e}(ea||{});const ta={id:"",name:"",creator_id:"",create_at:0,update_at:0,client_id:"",client_secret:"",oauth_token_url:"",grant_type:"client_credentials",audiences:[]};function aa(e){const[t,a]=(e=>{const t={name:e.name||"",audienceUrls:e.audiences?e.audiences.join("\n"):"",oauthTokenUrl:e.oauth_token_url||"",clientId:e.client_id||"",clientSecret:e.client_secret||"",grantType:"client_credentials"},[a,s]=(0,m.useState)(t);return(0,m.useMemo)((()=>[a,e=>{s((t=>({...t,...e})))}]),[a])})(e.initialConnection||ta),[o,r]=(0,m.useState)(""),[i,l]=(0,m.useState)(""),[c,d]=(0,m.useState)(!1),[u,g]=(0,m.useState)(ea.INITIAL),[h,E]=(0,m.useState)(!1),[_,f]=(0,m.useState)(!1),b=(0,p.useIntl)(),M=(0,s.useDispatch)(),k=!e.initialConnection,v=e=>{if(!t.name)return d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.name.required",defaultMessage:"Name for the OAuth connection is required."}));if(!t.clientId)return d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_id.required",defaultMessage:"Client Id for the OAuth connection is required."}));if((k||h)&&!t.clientSecret)return d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_secret.required",defaultMessage:"Client Secret for the OAuth connection is required."}));if(!t.grantType)return d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.grant_type.required",defaultMessage:"Grant Type for the OAuth connection is required."}));if(!t.oauthTokenUrl)return d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.oauth_token_url.required",defaultMessage:"OAuth Token URL for the OAuth connection is required."}));const a=[];for(let e of t.audienceUrls.split("\n"))e=e.trim(),e.length>0&&a.push(e);return e&&0===a.length?(d(!1),void r(m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.audienceUrls.required",defaultMessage:"One or more audience URLs are required."}))):{name:t.name,audiences:a,client_id:t.clientId,client_secret:t.clientSecret,grant_type:t.grantType,oauth_token_url:t.oauthTokenUrl}},N=()=>{f(!1)},y=()=>
1{if(c)return;const t=v(!0);t&&(r(""),u===ea.VALIDATED||!k&&u===ea.INITIAL||_?(d(!0),e.submitAction(t).then((()=>d(!1)))):f(!0))},A=e=>{e?.preventDefault(),u!==ea.DIRTY&&g(ea.DIRTY),i&&l("")},C=e.header,w=e.footer;let S=m.createElement("input",{id:"client_secret",type:"text",autoComplete:"off",className:"form-control",value:t.clientSecret,onChange:e=>{A(),a({clientSecret:e.target.value})}});return k||h||(S=m.createElement(m.Fragment,null,m.createElement("input",{id:"client_secret",disabled:!0,autoComplete:"off",type:"text",className:"form-control disabled",value:"â¢".repeat(40)}),m.createElement("span",{onClick:()=>{E(!0)},className:"outgoing-oauth-connections-edit-secret"},m.createElement("i",{className:"icon icon-pencil-outline"})))),m.createElement("div",{className:"backstage-content"},m.createElement($,null,m.createElement(n.Link,{to:`/${e.team.name}/integrations/outgoing-oauth2-connections`},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.header",defaultMessage:"Outgoing OAuth Connections"})),m.createElement(p.FormattedMessage,{id:C.id,defaultMessage:C.defaultMessage})),m.createElement("div",{className:"backstage-form"},m.createElement("form",{className:"form-horizontal"},m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"name"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.name.label",defaultMessage:"Name"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"name",type:"text",className:"form-control",value:t.name,onChange:e=>{a({name:e.target.value})}}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.name.help",defaultMessage:"Specify the name for your OAuth connection."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"client_id"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_id.label",defaultMessage:"Client ID"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"client_id",type:"text",autoComplete:"off",className:"form-control",value:t.clientId,onChange:e=>{A(),a({clientId:e.target.value})}}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_id.help",defaultMessage:"Specify the Client ID for your OAuth connection."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"client_secret"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_secret.label",defaultMessage:"Client Secret"})),m.createElement("div",{className:"col-md-5 col-sm-8"},S,m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.client_secret.help",defaultMessage:"Specify the Client Secret for your OAuth connection."})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"oauth_token_url"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.oauth_token_url.label",defaultMessage:"OAuth Token URL"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("input",{id:"token_url",type:"text",className:"form-control",value:t.oauthTokenUrl,onChange:e=>{A(),a({oauthTokenUrl:e.target.value})}}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.oauth_token_url.help",defaultMessage:"Specify the OAuth Token URL for your OAuth connection."})),m.createElement("div",{className:"outgoing-oauth-connection-validate-button-container"},m.createElement(sa,{onClick:async t=>{if(t.preventDefault(),u===ea.VALIDATING)return;r(""),g(ea.VALIDATING);const a=v(!1);if(!a)return void g(ea.INITIAL);e.initialConnection?.id&&(a.id=e.initialConnection.id);const{error:s}=await M((0,de.sF)(e.team.id,a));s?(g(ea.ERROR),l(s.message)):g(ea.VALIDATED)},setUnvalidated:A,status:u})))),m.createElement("div",{className:"form-group"},m.createElement("label",{className:"control-label col-sm-4",htmlFor:"audienceUrls"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.audienceUrls.label",defaultMessage:"Audience URLs (One Per Line)"})),m.createElement("div",{className:"col-md-5 col-sm-8"},m.createElement("textarea",{id:"audienceUrls",rows:3,className:"form-control",value:t.audie
1nceUrls,onChange:e=>{a({audienceUrls:e.target.value})}}),m.createElement("div",{className:"form__help"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.audienceUrls.help",defaultMessage:"The URLs which will receive requests with the OAuth token, e.g. your custom slash command handler endpoint. Must be a valid URL and start with http:// or https://."})))),m.createElement("div",{className:"backstage-form__footer"},m.createElement(Y.Ay,{type:"backstage",errors:[e.serverError,o]}),m.createElement(n.Link,{className:"btn btn-tertiary",to:`/${e.team.name}/integrations/outgoing-oauth2-connections`},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.cancel",defaultMessage:"Cancel"})),m.createElement(q.A,{className:"btn btn-primary",type:"submit",spinning:c,spinningText:b.formatMessage(e.loading),onClick:e=>{e.preventDefault(),y()},id:"saveConnection"},m.createElement(p.FormattedMessage,{id:w.id,defaultMessage:w.defaultMessage})),e.renderExtra))),m.createElement("div",{className:"outgoing-oauth-connections-docs-link"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.documentation_link",defaultMessage:"Get help with <link>configuring outgoing OAuth connections</link>.",values:{link:e=>m.createElement("a",{href:"https://mattermost.com/pl/outgoing-oauth-connections"},e)}})),m.createElement(ze.A,{show:_,message:b.formatMessage({id:"add_outgoing_oauth_connection.save_without_validation_warning",defaultMessage:"This connection has not been validated, Do you want to save anyway?"}),title:b.formatMessage({id:"add_outgoing_oauth_connection.confirm_save",defaultMessage:"Save Outgoing OAuth Connection"}),confirmButtonText:b.formatMessage({id:"add_outgoing_oauth_connection.save_anyway",defaultMessage:"Save anyway"}),onExited:N,onCancel:N,onConfirm:y}))}const sa=e=>{let{status:t,onClick:a,setUnvalidated:s}=e;return t===ea.ERROR?m.createElement("span",{className:"outgoing-oauth-connection-validation-message validation-error"},m.createElement(rt.AlertOutlineIcon,{size:20}),m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.validation_error",defaultMessage:"Connection not validated. Please check the server logs for details or <link>try again</link>.",values:{link:e=>m.createElement("a",{onClick:s},e)}})):t===ea.VALIDATED?m.createElement("span",{className:"outgoing-oauth-connection-validation-message validation-success"},m.createElement(rt.CheckCircleOutlineIcon,{size:20}),m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.validated_connection",defaultMessage:"Validated connection"})):t===ea.VALIDATING?m.createElement("span",{className:"outgoing-oauth-connection-validation-message"},m.createElement(it.A,{text:m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.validating",defaultMessage:"Validating..."})})):m.createElement("button",{className:"btn btn-tertiary btn-sm",type:"button",onClick:a,id:"validateConnection"},m.createElement(p.FormattedMessage,{id:"add_outgoing_oauth_connection.validate",defaultMessage:"Validate Connection"}))},na=(0,p.defineMessage)({id:"add_outgoing_oauth_connection.add",defaultMessage:"Add"}),oa=(0,p.defineMessage)({id:"add_outgoing_oauth_connection.save",defaultMessage:"Save"}),ra=(0,p.defineMessage)({id:"add_outgoing_oauth_connection.saving",defaultMessage:"Saving..."}),ia=e=>{let{team:t}=e;const a=(0,s.useDispatch)(),o=(0,n.useHistory)(),[r,i]=(0,m.useState)("");return m.createElement(aa,{team:t,header:na,footer:oa,loading:ra,submitAction:async e=>{i("");const{data:s,error:n}=await a((0,de.Vy)(t.id,e));s?o.push(`/${t.name}/integrations/confirm?type=outgoing-oauth2-connections&id=${s.id}`):n&&i(n.message)},serverError:r})},la=(0,p.defineMessage)({id:"integrations.edit",defaultMessage:"Edit"}),ca=(0,p.defineMessage)({id:"edit_outgoing_oauth_connection.update",defaultMessage:"Update"}),ma=(0,p.defineMessage)({id:"edit_outgoing_oauth_connection.updating",defaultMessage:"Updating..."}),da=e=>{const t=(a=e.location.search,new URLSearchParams(a).get("id")||"");var a;const n=(0,s.useSelector)(Be.FA)[t],[o,i]=(0,m.useState)(n),[l,c]=(0,m.useState)(!1),[d,u]=(0,m.useState)(""),g=(0,s.use
1Selector)(r.zj).EnableOAuthServiceProvider,h=(0,s.useDispatch)();(0,m.useEffect)((()=>{g&&h((0,de.WG)(e.team.id,t))}),[t,g,e.team,h]);const E=()=>{c(!1)},_=async t=>{u("");const a=await h((0,de.WT)(e.team.id,t));if("data"in a&&a.data)(0,V.J)().push(`/${e.team.name}/integrations/outgoing-oauth2-connections`);else if(E(),"error"in a){const{error:e}=a;u(e.message)}};return n?m.createElement(aa,{team:e.team,header:la,footer:ca,loading:ma,renderExtra:(()=>{const e=m.createElement(p.FormattedMessage,{id:"update_command.update",defaultMessage:"Update"}),t=m.createElement(p.FormattedMessage,{id:"update_outgoing_oauth_connection.confirm",defaultMessage:"Edit Outgoing OAuth Connection"}),a=m.createElement(p.FormattedMessage,{id:"update_outgoing_oauth_connection.question",defaultMessage:"Your changes may break any existing integrations using this connection. Are you sure you would like to update it?"});return m.createElement(ze.A,{title:t,message:a,confirmButtonText:e,modalClass:"integrations-backstage-modal",show:l,onConfirm:()=>_(o),onCancel:E})})(),submitAction:async e=>{i(e),n.id&&(e.id=n.id),n.audiences.length===e.audiences.length&&n.audiences.every(((t,a)=>t===e.audiences[a]))?await _(e):c(!0)},serverError:d,initialConnection:n}):m.createElement(x.A,null)};function ua(e,t){return!t||e.name.toLowerCase().includes(t)}const ga=e=>{const{outgoingOAuthConnection:t,creatorName:a}=e;if(!ua(t,e.filter))return null;let s;s=t.name?t.name:m.createElement(p.FormattedMessage,{id:"installed_integrations.unnamed_outgoing_oauth_connection",defaultMessage:"Unnamed Outgoing OAuth Connection"});const o=m.createElement(m.Fragment,null,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_integrations.audience_urls",defaultMessage:"Audience URLs: {urls}",values:{urls:m.createElement("code",null,t.audiences.join(", "))}}))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__url word-break--all"},m.createElement(p.FormattedMessage,{id:"installed_integrations.token_url",defaultMessage:"Token URL: {url}",values:{url:m.createElement("code",null,t.oauth_token_url)}})))),r=m.createElement("div",{className:"item-actions"},m.createElement(n.Link,{to:`/${e.team.name}/integrations/outgoing-oauth2-connections/edit?id=${t.id}`},m.createElement(p.FormattedMessage,{id:"installed_integrations.edit",defaultMessage:"Edit"}))," - ",m.createElement(A,{subtitleText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.delete.confirm",defaultMessage:"Are you sure you want to delete {connectionName}?",values:{connectionName:m.createElement("strong",null,e.outgoingOAuthConnection.name)}}),modalMessage:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.delete.wanring",defaultMessage:"Deleting this connection will break any integrations using it"}),onDelete:()=>{e.onDelete(e.outgoingOAuthConnection)}})),i=m.createElement(m.Fragment,null,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_integrations.client_id",defaultMessage:"Client ID: "}),m.createElement("strong",null,m.createElement("code",null,t.client_id)))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.client_secret",defaultMessage:"Client Secret: ********"}))),"password"===t.grant_type&&m.createElement(m.Fragment,null,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.username",defaultMessage:"Username: "}),m.createElement("strong",null,t.credentials_username))),m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__token"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.password",defaultMessage:"Password: ********"})))),o,m.createElement("div",{className:"item-details__row"},m.createElement("span",{className:"item-details__creation"},m.createElement(p.FormattedMessage,{id:"installed_integrations.creation",defaultMessage:"Created by {creator} on {createAt, date, full}",values:{creator:a,createAt:t.create_at}}))));return m.createElement("div",{className:"backstage-list__item"},m.createElement("div",{className:"item-details"},m.createElement("div",{className:"item-details__row d-flex flex-column flex-md-row justify-content-between"},m.createElement("strong",{className:"item-details__name"},s),r),i))},pa=e=>
1{const[t,a]=(0,m.useState)(!0),n=(0,s.useSelector)((t=>(0,i.mg)(t,e.team.id,o.xB.MANAGE_OUTGOING_OAUTH_CONNECTIONS))),l="true"===(0,s.useSelector)(r.zj).EnableOutgoingOAuthConnections,c=(0,s.useSelector)(Be.FA),d=(0,s.useDispatch)(),u=(0,p.useIntl)();(0,m.useEffect)((()=>{n&&d((0,st.yp)(e.team.id)).then((()=>a(!1)))}),[n,e.team,d]);const g=e=>{e&&e.id&&d((0,de.NB)(e.id))},h=(e,t)=>{let a=e.name.toString();a||(a=u.formatMessage({id:"installed_integrations.unnamed_outgoing_oauth_connection",defaultMessage:"Unnamed Outgoing OAuth Connection"}));let s=t.name.toString();return s||(s=u.formatMessage({id:"installed_integrations.unnamed_outgoing_oauth_connection",defaultMessage:"Unnamed Outgoing OAuth Connection"})),a.localeCompare(s)};let E;return l&&n&&(E={addLink:"/"+e.team.name+"/integrations/outgoing-oauth2-connections/add",addText:u.formatMessage({id:"installed_outgoing_oauth_connections.add",defaultMessage:"Add Outgoing OAuth Connection"}),addButtonId:"addOutgoingOauthConnection"}),m.createElement(Ge,Object.assign({header:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.header",defaultMessage:"Outgoing OAuth Connections"}),helpText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.help",defaultMessage:"Create {outgoingOauthConnections} to securely integrate bots and third-party apps with Mattermost.",values:{outgoingOauthConnections:m.createElement(Q.A,{href:K.i3.SETUP_OAUTH2,location:"installed_outgoing_oauth_connections"},m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.help.outgoingOauthConnections",defaultMessage:"Outgoing OAuth Connections"}))}}),emptyText:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.empty",defaultMessage:"No Outgoing OAuth Connections found"}),emptyTextSearch:m.createElement(p.FormattedMessage,{id:"installed_outgoing_oauth_connections.emptySearch",defaultMessage:"No Outgoing OAuth Connections match {searchTerm}"}),searchPlaceholder:u.formatMessage({id:"installed_outgoing_oauth_connections.search",defaultMessage:"Search Outgoing OAuth Connections"}),loading:t},E),(t=>{const a=(t=>Object.values(c).filter((e=>ua(e,t))).sort(h).map((t=>m.createElement(ga,{key:t.id,outgoingOAuthConnection:t,onDelete:g,team:e.team,creatorName:""}))))(t);return[a,a.length>0]}))};var ha=a(694),Ea=a(81806),_a=a(71633),fa=a.n(_a);const ba=e=>{let{name:t,title:a,icon:s,parentLink:o,children:r=[]}=e;const i=o+"/"+t;return m.createElement("li",{className:"backstage-sidebar__category"},m.createElement(n.NavLink,{to:i,className:"category-title",activeClassName:"category-title--active"},m.createElement("i",{className:fa()("fa ",s)}),m.createElement("span",{className:"category-title__text"},a)),r&&r.length>0&&m.createElement(n.Route,{path:i,render:()=>m.createElement("ul",{className:"sections"},m.Children.map(r,(e=>e?m.cloneElement(e,{parentLink:i}):e)))}))},Ma=e=>{let{name:t,title:a,subsection:s=!1,parentLink:o="",children:r=[],id:i}=e;const l=o+"/"+t;let c=null;r.length>0&&(c=m.createElement("ul",{className:"subsections"},m.Children.map(r,(e=>m.cloneElement(e,{parentLink:l,subsection:!0})))));const d=s?"subsection":"section";return m.createElement("li",{className:d,id:i},m.createElement(n.NavLink,{className:`${d}-title`,activeClassName:`${d}-title--active`,to:l},m.createElement("span",{className:`${d}-title__text`},a)),c)};class ka extends m.PureComponent{renderCustomEmoji(){return this.props.enableCustomEmoji&&this.props.canCreateOrDeleteCustomEmoji?m.createElement(ba,{name:"emoji",parentLink:"/"+this.props.team.name,icon:"fa-smile-o",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.emoji",defaultMessage:"Custom Emoji"})}):null}renderIntegrations(){if(!this.props.canManageIntegrations)return null;let e;this.props.enableIncomingWebhooks&&(e=m.createElement(ee.A,{permissions:[o.xB.MANAGE_INCOMING_WEBHOOKS,o.xB.MANAGE_OWN_INCOMING_WEBHOOKS],teamId:this.props.team.id},m.createElement(Ma,{name:"incoming_webhooks",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations.incoming_webhooks",defaultMessage:"Incoming Webhooks"}),id:"incomingWebhooks"})));let t=null;this.props.enableOutgoingWebhooks&&(t=m.createElement(ee.A,{permissions:[o.xB.MANAGE_OUTGOING_WEBHOOKS,o.xB.MANAGE_OWN_OUTGOING_WEBHOOKS],teamId:this.props.team.id},m.createElement(Ma,{name:"outgoing_webhooks",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations.outgoing_webhooks",defaultMessage:"Outgoing Webhooks"}),id:"outgoingWebhooks"})));let a=null;this.props.enableCommands&&(a=m.createElement(ee.A,{permissions:[o.xB.MANAGE_SLASH_COMMANDS,o.xB.MANAGE_OWN_SLASH_COMMANDS],teamId:this.props.team.id},m.createElement(Ma,{name:"commands",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations.commands",defaultMessage:"Slash Commands"}),id:"slashCommands"})));let s=null;this.props.enableOAuthServiceProvider&&(s=m.createElement(Z.A,{permissions:[o.xB.MANAGE_OAUTH]},m.createElement(Ma,{name:"oauth2-apps",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations.oauthApps",defaultMessage:"OAuth 2.0 Applications"}),id:"oauthApps"})));const n=m.createElement(Z.A,{permissions:["manage_bots","manage_others_bots"]},m.createElement(Ma,{name:"bots",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.bots",defaultMessage:"Bot Accounts"}),id:"botAccounts"}));let r=null;return this.props.enableOutgoingOAuthConnections&&(r=m.createElement(ee.A,{permissions:[o.xB.MANAGE_OUTGOING_OAUTH_CONNECTIONS],teamId:this.props.team.id},m.createElement(Ma,{name:"outgoing-oauth2-connections",parentLink:"/"+this.props.team.name+"/integrations",title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations.outgoingOauthConnections",defaultMessage:"Outgoing OAuth 2.0 Connections"}),id:"outgoingOauthConnections"}
1))),m.createElement(ba,{name:"integrations",icon:"fa-link",parentLink:"/"+this.props.team.name,title:m.createElement(p.FormattedMessage,{id:"backstage_sidebar.integrations",defaultMessage:"Integrations"})},e,t,a,s,n,r)}render(){return m.createElement("div",{className:"backstage-sidebar"},m.createElement("ul",null,this.renderCustomEmoji(),this.renderIntegrations()))}}const va=e=>{let{component:t,extraProps:a,...s}=e;return m.createElement(n.Route,Object.assign({},s,{render:e=>m.createElement(t,Object.assign({},a,e))}))},Na=(0,d.createGlobalStyle)(["#root{> #global-header,> .team-sidebar,> .main-wrapper .sidebar--right,> .app-bar{display:none;}}"]),ya=(0,n.withRouter)((0,s.connect)((function(e){const t=(0,c.HW)(e),a=(0,l.H7)(e),s=(0,r.zj)(e),n=s.SiteName,m="true"===s.EnableCustomEmoji,d="true"===s.EnableIncomingWebhooks,u="true"===s.EnableOutgoingWebhooks,g="true"===s.EnableCommands,p="true"===s.EnableOAuthServiceProvider,h="true"===s.EnableOutgoingOAuthConnections;let E=(0,i.y4)(e,{permission:o.xB.CREATE_EMOJIS})||(0,i.y4)(e,{permission:o.xB.DELETE_EMOJIS});if(!E)for(const t of(0,l.vt)(e))if((0,i.mg)(e,t.id,o.xB.CREATE_EMOJIS)||(0,i.mg)(e,t.id,o.xB.DELETE_EMOJIS)){E=!0;break}const _=(0,i.mg)(e,a?.id,o.xB.MANAGE_SLASH_COMMANDS)||(0,i.mg)(e,a?.id,o.xB.MANAGE_OWN_SLASH_COMMANDS)||(0,i.mg)(e,a?.id,o.xB.MANAGE_INCOMING_WEBHOOKS)||(0,i.mg)(e,a?.id,o.xB.MANAGE_OWN_INCOMING_WEBHOOKS)||(0,i.mg)(e,a?.id,o.xB.MANAGE_OUTGOING_WEBHOOKS)||(0,i.mg)(e,a?.id,o.xB.MANAGE_OWN_OUTGOING_WEBHOOKS)||(0,i.y4)(e,{permission:o.xB.MANAGE_OAUTH}),f=(0,i.y4)(e,{permission:o.xB.MANAGE_BOTS})||(0,i.y4)(e,{permission:o.xB.MANAGE_OTHERS_BOTS});return{user:t,team:a,siteName:n,enableCustomEmoji:m,enableIncomingWebhooks:d,enableOutgoingWebhooks:u,enableCommands:g,enableOAuthServiceProvider:p,enableOutgoingOAuthConnections:h,canCreateOrDeleteCustomEmoji:E,canManageIntegrations:_||f}}))((e=>{const t=(0,m.useRef)(null);if(!e.team||!e.user)return null;const a={team:e.team,user:e.user,scrollToTop:()=>{t.current&&(t.current.scrollTop=0)}};return m.createElement(m.Fragment,null,m.createElement(Ea.A,{team:e.team,siteName:e.siteName}),m.createElement("div",{className:"backstage-body",ref:t},m.createElement(ha.default,{pluggableName:"Root"}),m.createElement(ka,{team:e.team,enableCustomEmoji:e.enableCustomEmoji,enableIncomingWebhooks:e.enableIncomingWebhooks,enableOutgoingWebhooks:e.enableOutgoingWebhooks,enableCommands:e.enableCommands,enableOAuthServiceProvider:e.enableOAuthServiceProvider,enableOutgoingOAuthConnections:e.enableOutgoingOAuthConnections,canCreateOrDeleteCustomEmoji:e.canCreateOrDeleteCustomEmoji,canManageIntegrations:e.canManageIntegrations}),m.createElement(n.Switch,null,m.createElement(va,{extraProps:a,exact:!0,path:"/:team/integrations",component:me}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/incoming_webhooks`,component:Wt}),m.createElement(va,{extraProps:a,path:`${e.match.url}/incoming_webhooks/add`,component:ye}),m.createElement(va,{extraProps:a,path:`${e.match.url}/incoming_webhooks/edit`,component:St}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/outgoing_webhooks`,component:Zt}),m.createElement(va,{extraProps:a,path:`${e.match.url}/outgoing_webhooks/add`,component:Oe}),m.createElement(va,{extraProps:a,path:`${e.match.url}/outgoing_webhooks/edit`,component:Ht}),m.createElement(va,{extraProps:a,path:`${e.match.url}/commands`,component:At}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/oauth2-apps`,component:Kt}),m.createElement(va,{extraProps:a,path:`${e.match.url}/oauth2-apps/add`,component:we}),m.createElement(va,{extraProps:a,path:`${e.match.url}/oauth2-apps/edit`,component:It}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/outgoing-oauth2-connections`,component:pa}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/outgoing-oauth2-connections/add`,component:ia}),m.createElement(va,{extraProps:a,exact:!0,path:`${e.match.url}/outgoing-oauth2-connections/edit`,component:da}),m.createElement(va,{extraProps:a,path:`${e.match.url}/confirm`,component:ht}),m.createElement(va,{extraProps:a,exact:!0,path:"/:team/emoji",component:G}),m.createElement(va,{extraProps:a,path:`${e.match.url}/add`,component:X}),m.createElement(va,{extraProps:a,path:`${e.match.url}/bots/add`,component:at}),m.createElement(va,{extraProps:a,path:`${e.match.url}/bots/edit`,component:at}),m.createElement(va,{extraProps:a,path:`${e.match.url}/bots`,component:Ke}))),m.createElement(Na,null))})))},85990(e,t,a){a.d(t,{Ay:()=>i,Nq:()=>n});var s=a(36418);const n="backstage",o=[],r=e=>{let{error:t=null,errors:a=o,iconClassName:r,margin:i,textClassName:l,type:c}=e;if(!t&&0===a.length)return null;let m=t;if(!m)for(const e of a)e&&(m=e);return m?"modal"===c?s.createElement("div",{className:"form-group"},s.createElement("label",{className:"col-sm-12 has-error"},m)):c===n?s.createElement("div",{className:"pull-left has-error"},s.createElement("label",{className:"control-label"},m)):i?s.createElement("div",{className:"form-group has-error"},s.createElement("label",{className:"control-label"},m)):s.createElement("div",{className:`col-sm-12 ${l||"has-error"}`},s.createElement("label",{className:"control-label"},s.createElement("i",{className:`fa ${r||"fa-exclamation-circle"}`})," ",m)):null},i=s.memo(r)},87064(e,t,a){a.d(t,{A:()=>l});var s=a(71633),n=a.n(s),o=a(36418),r=a(14778);const i=e=>{let{additionalClassName:t}=e;const{formatMessage:a}=(0,r.useIntl)();return o.createElement("i",{className:n()("fa fa-warning",t),title:a({id:"generic_icons.warning",defaultMessage:"Warning Icon"})})},l=o.memo(i)},74290(e,t,a){a.d(t,{jd:()=>i,s9:()=>r}),a(76281),a(43617),a(99930);var s=a(8361),n=a(3569);const o=["mattermost-advisor"];function r(e){return e.entities.bots.accounts}const i=(0,s.Mz)("getExternalBotAccounts",r,n.lo,((e,t)=>{const a={};return Object.values(e).forEach((e=>{const s=t[e.user_id];s&&!o.includes(s.username)&&(a[e.user_id]=e)})),a}))}}]); 2//# sourceMappingURL=3221.6c4966bd571e60e4e9e6.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.