@hienlh/ppm 0.9.54 → 0.9.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -2
- package/dist/web/assets/{chat-tab-C7LUU8uc.js → chat-tab-SfXtOm9d.js} +1 -1
- package/dist/web/assets/{code-editor-D8qEQfSv.js → code-editor-DAZvtAlT.js} +1 -1
- package/dist/web/assets/database-viewer-C5fco1jm.js +1 -0
- package/dist/web/assets/{diff-viewer-UGOYufsF.js → diff-viewer-ShRSPvsf.js} +1 -1
- package/dist/web/assets/{extension-webview-fljR76zl.js → extension-webview-CWJRMPfV.js} +1 -1
- package/dist/web/assets/{git-graph-Ccyey8cC.js → git-graph-h0QmXMdZ.js} +1 -1
- package/dist/web/assets/{index-CgvhdpCl.js → index-CDlrGSwd.js} +3 -3
- package/dist/web/assets/keybindings-store-wbHg-S_v.js +1 -0
- package/dist/web/assets/{markdown-renderer-Fm0AKs27.js → markdown-renderer-CSEmmMWt.js} +1 -1
- package/dist/web/assets/{port-forwarding-tab-9XP7jh5d.js → port-forwarding-tab-Cts6tMFn.js} +1 -1
- package/dist/web/assets/{postgres-viewer-BU2c67YN.js → postgres-viewer-CiQC1sf9.js} +1 -1
- package/dist/web/assets/{settings-tab-kSrv-eTK.js → settings-tab-CQx6aHtO.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-Ctlu51c-.js → sqlite-viewer-FQfCkjU6.js} +1 -1
- package/dist/web/assets/{terminal-tab-Cx6Wl0GQ.js → terminal-tab-C2SnOqxn.js} +1 -1
- package/dist/web/assets/{use-monaco-theme-DQ-JnmSE.js → use-monaco-theme-VPgvhMpB.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/web/components/database/database-viewer.tsx +50 -8
- package/src/web/components/database/use-database.ts +13 -1
- package/dist/web/assets/database-viewer-Duryc3Y0.js +0 -1
- package/dist/web/assets/keybindings-store-CGXc_Nqv.js +0 -1
|
@@ -111,10 +111,22 @@ export function useDatabase(connectionId: number) {
|
|
|
111
111
|
}
|
|
112
112
|
}, [base, selectedTable, selectedSchema, fetchTableData]);
|
|
113
113
|
|
|
114
|
+
const deleteRow = useCallback(async (pkColumn: string, pkValue: unknown) => {
|
|
115
|
+
if (!selectedTable) return;
|
|
116
|
+
const t = selectedTable;
|
|
117
|
+
const s = selectedSchema;
|
|
118
|
+
try {
|
|
119
|
+
await api.del(`${base}/row`, { table: t, schema: s, pkColumn, pkValue });
|
|
120
|
+
fetchTableData(t, s);
|
|
121
|
+
} catch (e) {
|
|
122
|
+
setError((e as Error).message);
|
|
123
|
+
}
|
|
124
|
+
}, [base, selectedTable, selectedSchema, fetchTableData]);
|
|
125
|
+
|
|
114
126
|
return {
|
|
115
127
|
selectedTable, selectTable, tableData, schema,
|
|
116
128
|
loading, error, page, setPage: changePage,
|
|
117
129
|
queryResult, queryError, queryLoading, executeQuery,
|
|
118
|
-
updateCell, refreshData: fetchTableData,
|
|
130
|
+
updateCell, deleteRow, refreshData: fetchTableData,
|
|
119
131
|
};
|
|
120
132
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./chunk-CFjPhJqf.js";import{t}from"./react-nm2Ru1Pt.js";import{t as n}from"./chevron-right-5HgK6l7K.js";import{t as r}from"./jsx-runtime-kMwlnEGE.js";import{t as i}from"./api-client-BKIT_Qeg.js";import{at as a,jt as o,pt as s,rt as c,wt as l}from"./index-CgvhdpCl.js";import{n as u,r as d,t as f}from"./lib-mag4ySk-.js";import{i as p,n as m,r as h,t as g}from"./dist-C40JmyoH.js";var _=e(t(),1);function v(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function y(e,t,n,r){try{let i=sessionStorage.getItem(v(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function b(e,t,n,r,i,a){try{sessionStorage.setItem(v(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function x(e){let t=`/api/db/connections/${e}`,[n,r]=(0,_.useState)(null),[a,o]=(0,_.useState)(`public`),[s,c]=(0,_.useState)(null),[l,u]=(0,_.useState)([]),[d,f]=(0,_.useState)(!0),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(1),[v,x]=(0,_.useState)(null),[S,C]=(0,_.useState)(null),[w,T]=(0,_.useState)(!1),E=(0,_.useCallback)(async(r,o,s)=>{let l=r??n,d=o??a;if(l){f(!0);try{let[n,r]=await Promise.all([i.get(`${t}/data?table=${encodeURIComponent(l)}&schema=${d}&page=${s??h}&limit=100`),i.get(`${t}/schema?table=${encodeURIComponent(l)}&schema=${d}`)]);c(n),u(r),b(e,l,d,s??h,n,r)}catch(e){m(e.message)}finally{f(!1)}}},[t,e,n,a,h]);return{selectedTable:n,selectTable:(0,_.useCallback)((t,n=`public`)=>{r(t),o(n),g(1),x(null);let i=y(e,t,n,1);i?(c(i.data),u(i.cols),f(!1),E(t,n,1)):E(t,n,1)},[e,E]),tableData:s,schema:l,loading:d,error:p,page:h,setPage:(0,_.useCallback)(e=>{g(e),E(void 0,void 0,e)},[E]),queryResult:v,queryError:S,queryLoading:w,executeQuery:(0,_.useCallback)(async e=>{T(!0),C(null);try{let r=await i.post(`${t}/query`,{sql:e});x(r),r.changeType===`modify`&&E(n??void 0,a)}catch(e){C(e.message)}finally{T(!1)}},[t,n,a,E]),updateCell:(0,_.useCallback)(async(e,r,o,s)=>{if(!n)return;let c=n,l=a;try{await i.put(`${t}/cell`,{table:c,schema:l,pkColumn:e,pkValue:r,column:o,value:s}),E(c,l)}catch(e){m(e.message)}},[t,n,a,E]),refreshData:E}}var S=r(),C={postgres:g,sqlite:m};function w({metadata:e}){let t=e?.connectionId,n=e?.connectionName,r=e?.dbType??`postgres`,i=e?.tableName,a=e?.schemaName??`public`,o=x(t),[s,u]=(0,_.useState)(!1),d=(0,_.useRef)(!1);return(0,_.useEffect)(()=>{!i||d.current||(d.current=!0,o.selectTable(i,a))},[i,a]),(0,S.jsx)(`div`,{className:`flex h-full w-full overflow-hidden`,children:(0,S.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,S.jsx)(l,{className:`size-3.5 text-muted-foreground`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:n??`Database`}),o.selectedTable&&(0,S.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,o.selectedTable]}),(0,S.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>o.refreshData(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,S.jsx)(c,{className:`size-3 ${o.loading?`animate-spin`:``}`})}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>u(e=>!e),className:`px-2 py-1 rounded text-xs transition-colors ${s?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:`SQL`})]})]}),(0,S.jsx)(`div`,{className:`flex-1 overflow-hidden ${s?`max-h-[60%]`:``}`,children:(0,S.jsx)(T,{tableData:o.tableData,schema:o.schema,loading:o.loading,page:o.page,onPageChange:o.setPage,onCellUpdate:o.updateCell})}),s&&(0,S.jsx)(`div`,{className:`border-t border-border h-[40%] shrink-0`,children:(0,S.jsx)(E,{dialect:C[r]??g,onExecute:o.executeQuery,result:o.queryResult,error:o.queryError,loading:o.queryLoading})})]})})}function T({tableData:e,schema:t,loading:r,page:i,onPageChange:a,onCellUpdate:c}){let[l,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(``),g=(0,_.useMemo)(()=>t.find(e=>e.pk)?.name??null,[t]),v=(0,_.useCallback)((e,t,n)=>{p({rowIdx:e,col:t}),h(n==null?``:String(n))},[]),y=(0,_.useCallback)(()=>{if(!l||!e||!g)return;let t=e.rows[l.rowIdx];if(!t)return;let n=t[l.col];String(n??``)!==m&&c(g,t[g],l.col,m===``?null:m),p(null)},[l,m,e,g,c]),b=(0,_.useCallback)(()=>p(null),[]),x=(0,_.useMemo)(()=>(e?.columns??[]).map(e=>({id:e,accessorFn:t=>t[e],header:()=>(0,S.jsx)(`span`,{className:t.find(t=>t.name===e)?.pk?`font-bold`:``,children:e}),cell:({row:t,getValue:n})=>{let r=l?.rowIdx===t.index&&l?.col===e,i=n();return r?(0,S.jsx)(`input`,{autoFocus:!0,className:`w-full bg-transparent border border-primary/50 rounded px-1 py-0 text-xs outline-none`,value:m,onChange:e=>h(e.target.value),onBlur:y,onKeyDown:e=>{e.key===`Enter`&&y(),e.key===`Escape`&&b()}}):(0,S.jsx)(`span`,{className:`cursor-pointer truncate block ${i==null?`text-muted-foreground/40 italic`:``}`,onDoubleClick:()=>g&&v(t.index,e,i),title:i==null?`NULL`:String(i),children:i==null?`NULL`:String(i)})}})),[e?.columns,t,l,m,y,b,v,g]),C=u({data:e?.rows??[],columns:x,getCoreRowModel:d()});if(!e)return(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:r?(0,S.jsx)(s,{className:`size-4 animate-spin`}):`Select a table`});let w=Math.ceil(e.total/e.limit)||1;return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,S.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,S.jsxs)(`table`,{className:`w-full text-xs border-collapse`,children:[(0,S.jsx)(`thead`,{className:`sticky top-0 z-10 bg-muted`,children:C.getHeaderGroups().map(e=>(0,S.jsx)(`tr`,{children:e.headers.map(e=>(0,S.jsx)(`th`,{className:`px-2 py-1.5 text-left font-medium text-muted-foreground border-b border-border whitespace-nowrap`,children:f(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,S.jsxs)(`tbody`,{children:[C.getRowModel().rows.map(e=>(0,S.jsx)(`tr`,{className:`hover:bg-muted/30 border-b border-border/50`,children:e.getVisibleCells().map(e=>(0,S.jsx)(`td`,{className:`px-2 py-1 max-w-[300px]`,children:f(e.column.columnDef.cell,e.getContext())},e.id))},e.id)),e.rows.length===0&&(0,S.jsx)(`tr`,{children:(0,S.jsx)(`td`,{colSpan:e.columns.length,className:`px-2 py-8 text-center text-muted-foreground`,children:`No data`})})]})]})}),(0,S.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-t border-border bg-background shrink-0 text-xs text-muted-foreground`,children:[(0,S.jsxs)(`span`,{children:[e.total.toLocaleString(),` rows`]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(`button`,{type:`button`,disabled:i<=1,onClick:()=>a(i-1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,S.jsx)(o,{className:`size-3.5`})}),(0,S.jsxs)(`span`,{children:[i,` / `,w]}),(0,S.jsx)(`button`,{type:`button`,disabled:i>=w,onClick:()=>a(i+1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,S.jsx)(n,{className:`size-3.5`})})]})]})]})}function E({dialect:e,onExecute:t,result:n,error:r,loading:i}){let[o,c]=(0,_.useState)(`SELECT * FROM `),l=(0,_.useCallback)(()=>{let e=o.trim();e&&t(e)},[o,t]);return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-start gap-1 border-b border-border bg-background`,onKeyDown:(0,_.useCallback)(e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),l())},[l]),children:[(0,S.jsx)(`div`,{className:`flex-1 max-h-[120px] overflow-auto`,children:(0,S.jsx)(p,{value:o,onChange:c,extensions:[h({dialect:e})],basicSetup:{lineNumbers:!1,foldGutter:!1,highlightActiveLine:!1},className:`text-xs [&_.cm-editor]:!outline-none [&_.cm-scroller]:!overflow-auto`})}),(0,S.jsx)(`button`,{type:`button`,onClick:l,disabled:i,title:`Execute (Cmd+Enter)`,className:`shrink-0 m-1 p-1.5 rounded bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors`,children:i?(0,S.jsx)(s,{className:`size-3.5 animate-spin`}):(0,S.jsx)(a,{className:`size-3.5`})})]}),(0,S.jsxs)(`div`,{className:`flex-1 overflow-auto text-xs`,children:[r&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5`,children:r}),n?.changeType===`modify`&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-green-500`,children:[`Query executed. `,n.rowsAffected,` row(s) affected.`]}),n?.changeType===`select`&&n.rows.length>0&&(0,S.jsxs)(`table`,{className:`w-full border-collapse`,children:[(0,S.jsx)(`thead`,{className:`sticky top-0 bg-muted`,children:(0,S.jsx)(`tr`,{children:n.columns.map(e=>(0,S.jsx)(`th`,{className:`px-2 py-1 text-left font-medium text-muted-foreground border-b border-border whitespace-nowrap`,children:e},e))})}),(0,S.jsx)(`tbody`,{children:n.rows.map((e,t)=>(0,S.jsx)(`tr`,{className:`hover:bg-muted/30 border-b border-border/50`,children:n.columns.map(t=>(0,S.jsx)(`td`,{className:`px-2 py-1 max-w-[300px] truncate`,title:e[t]==null?`NULL`:String(e[t]),children:e[t]==null?(0,S.jsx)(`span`,{className:`text-muted-foreground/40 italic`,children:`NULL`}):String(e[t])},t))},t))})]}),n?.changeType===`select`&&n.rows.length===0&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-muted-foreground`,children:`No results`})]})]})}export{w as DatabaseViewer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./react-nm2Ru1Pt.js";import"./api-client-BKIT_Qeg.js";import{W as e}from"./index-CgvhdpCl.js";export{e as useKeybindingsStore};
|