1+ import { UpdateExtensionSettingsArgs } from '@sourcegraph/extensions-client-common/lib/context'
12import { Controller as ExtensionsContextController } from '@sourcegraph/extensions-client-common/lib/controller'
23import { ConfiguredExtension } from '@sourcegraph/extensions-client-common/lib/extensions/extension'
34import { gql , graphQLContent } from '@sourcegraph/extensions-client-common/lib/graphql'
@@ -17,15 +18,14 @@ import { isEqual } from 'lodash'
1718import Alert from 'mdi-react/AlertIcon'
1819import MenuDown from 'mdi-react/MenuDownIcon'
1920import Menu from 'mdi-react/MenuIcon'
20- import { combineLatest , Observable , Subject , throwError } from 'rxjs'
21+ import { combineLatest , from , Observable , throwError } from 'rxjs'
2122import { distinctUntilChanged , map , mergeMap , switchMap , take } from 'rxjs/operators'
2223import { ClientOptions } from 'sourcegraph/module/client/client'
2324import { MessageTransports } from 'sourcegraph/module/jsonrpc2/connection'
2425import { TextDocumentDecoration } from 'sourcegraph/module/protocol'
25- import { ConfigurationUpdateParams } from 'sourcegraph/module/protocol'
2626import uuid from 'uuid'
2727import { Disposable } from 'vscode-languageserver'
28- import storage from '../../browser/storage'
28+ import storage , { StorageItems } from '../../browser/storage'
2929import { ExtensionConnectionInfo } from '../../extension/scripts/background'
3030import { onFirstMessage } from '../../extension/scripts/background'
3131import { getContext } from './context'
@@ -255,45 +255,7 @@ export function createExtensionsContextController(
255255 map ( ( [ gqlCascade , storageCascade ] ) => mergeCascades ( gqlToCascade ( gqlCascade ) , storageCascade ) ) ,
256256 distinctUntilChanged ( ( a , b ) => isEqual ( a , b ) )
257257 ) ,
258- updateExtensionSettings : (
259- subjectID ,
260- args : { extensionID : string ; edit ?: ConfigurationUpdateParams ; enabled ?: boolean ; remove ?: boolean }
261- ) => {
262- if ( subjectID !== 'Client' ) {
263- return throwError ( 'Cannot update settings for ' + subjectID + '.' )
264- }
265- const update = new Subject < undefined > ( )
266- storage . getSync ( storageItems => {
267- let clientSettings = storageItems . clientSettings
268-
269- const format = { tabSize : 2 , insertSpaces : true , eol : '\n' }
270-
271- if ( args . edit ) {
272- clientSettings = applyEdits (
273- clientSettings ,
274- // TODO(chris): remove `.slice()` (which guards against
275- // mutation) once
276- // https://github.com/Microsoft/node-jsonc-parser/pull/12
277- // is merged in.
278- setProperty ( clientSettings , args . edit . path . slice ( ) , args . edit . value , format )
279- )
280- } else if ( typeof args . enabled === 'boolean' ) {
281- clientSettings = applyEdits (
282- clientSettings ,
283- setProperty ( clientSettings , [ 'extensions' , args . extensionID ] , args . enabled , format )
284- )
285- } else if ( args . remove ) {
286- clientSettings = applyEdits (
287- clientSettings ,
288- removeProperty ( clientSettings , [ 'extensions' , args . extensionID ] , format )
289- )
290- }
291- storage . setSync ( { clientSettings } , ( ) => {
292- update . next ( undefined )
293- } )
294- } )
295- return update
296- } ,
258+ updateExtensionSettings,
297259 queryGraphQL : ( request , variables ) =>
298260 storage . observeSync ( 'sourcegraphURL' ) . pipe (
299261 take ( 1 ) ,
@@ -315,3 +277,41 @@ export function createExtensionsContextController(
315277 } ,
316278 } )
317279}
280+
281+ export const updateExtensionSettings = ( subjectID , args : UpdateExtensionSettingsArgs ) : Observable < undefined > => {
282+ if ( subjectID !== 'Client' ) {
283+ return throwError ( 'Cannot update settings for ' + subjectID + '.' )
284+ }
285+ return from (
286+ new Promise < StorageItems > ( resolve => storage . getSync ( storageItems => resolve ( storageItems ) ) ) . then (
287+ storageItems => {
288+ let clientSettings = storageItems . clientSettings
289+
290+ const format = { tabSize : 2 , insertSpaces : true , eol : '\n' }
291+
292+ if ( 'edit' in args && args . edit ) {
293+ clientSettings = applyEdits (
294+ clientSettings ,
295+ // TODO(chris): remove `.slice()` (which guards against
296+ // mutation) once
297+ // https://github.com/Microsoft/node-jsonc-parser/pull/12
298+ // is merged in.
299+ setProperty ( clientSettings , args . edit . path . slice ( ) , args . edit . value , format )
300+ )
301+ } else if ( 'extensionID' in args ) {
302+ clientSettings = applyEdits (
303+ clientSettings ,
304+ typeof args . enabled === 'boolean'
305+ ? setProperty ( clientSettings , [ 'extensions' , args . extensionID ] , args . enabled , format )
306+ : removeProperty ( clientSettings , [ 'extensions' , args . extensionID ] , format )
307+ )
308+ }
309+ return new Promise < undefined > ( resolve =>
310+ storage . setSync ( { clientSettings } , ( ) => {
311+ resolve ( undefined )
312+ } )
313+ )
314+ }
315+ )
316+ )
317+ }
0 commit comments